0

変数:

NSMutableDictionary *rootObj;
NSDictionary *innerDict;
NSString *name;
NSArray *scores;

コード:

rootObj = [NSMutableDictionary dictionaryWithCapacity:2];

    scores = [NSArray arrayWithObjects:[NSNumber numberWithInt:6],
              [NSNumber numberWithFloat:4.6], [NSNumber numberWithLong:6.0000034], nil];
    name = @"George Washington";



    innerDict = [NSDictionary dictionaryWithObjects:
                 [NSArray arrayWithObjects: name, scores, nil]
                                            forKeys:[NSArray arrayWithObjects:@"Name", @"Scores", nil]];
    [rootObj setObject:innerDict forKey:@"Washington"];

    scores = [NSArray arrayWithObjects:[NSNumber numberWithInt:8],
              [NSNumber numberWithFloat:4.9],
              [NSNumber numberWithLong:9.003433], nil];
    name = @"Abraham Lincoln";


    innerDict = [NSDictionary dictionaryWithObjects:
                 [NSArray arrayWithObjects: name, scores, nil]
                                            forKeys:[NSArray arrayWithObjects:@"Name", @"Scores", nil]];
    [rootObj setObject:innerDict forKey:@"Lincoln"];

    id plist = [NSPropertyListSerialization dataFromPropertyList:(id)rootObj
                                                          format:NSPropertyListXMLFormat_v1_0 errorDescription:nil];

    // SERIALIZATION

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
    NSData *xmlData;
    NSString *error;

    xmlData = [NSPropertyListSerialization dataFromPropertyList:plist
                                                         format:NSPropertyListXMLFormat_v1_0
                                               errorDescription:&error];
    if(xmlData) {
        NSLog(@"No error creating XML data.");
        [xmlData writeToFile:path atomically:YES];
        NSFileManager *manger = [[NSFileManager alloc] init];
        NSLog(@"%@", [manger contentsAtPath:path]);
    }
    else {
        NSLog(@"error");
       // [error release];
    }

    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    NSLog(@"%@", myDictionary);

出力は次のとおりです。

2013-01-18 14:33:50.066 PListTrials[11281:c07] No error creating XML data.
2013-01-18 14:33:50.067 PListTrials[11281:c07] (null)
2013-01-18 14:33:50.067 PListTrials[11281:c07] (null)

myDictionary はどのように null ですか? コードの抜粋: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/CreatePropListProgram/CreatePropListProgram.html#//apple_ref/doc/uid/10000048i-CH5-SW1

4

2 に答える 2

1

アプリケーション本体バンドルには書き込めません。ドキュメントバンドルで行う

最初は、plist ファイル「Data.plist」がパスに存在しないため、作成する必要があります。データを書き込むときはいつでもファイルが存在するかどうかを確認することをお勧めします。次のことを試してください。

NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"Data.plist"];
if ([fileManager fileExistsAtPath:path] == NO) {
    [fileManager createFileAtPath:path contents:YourContent attributes:nil];
}else {
    [Content writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
于 2013-01-18T19:48:55.943 に答える
0

簡単です。アプリケーション バンドルに書き込むことはできません。path書き込み可能なもの (Documents ディレクトリなど) に変更します。

アップデート:

また、

xmlData = [NSPropertyListSerialization dataFromPropertyList:plist
                                                     format:NSPropertyListXMLFormat_v1_0
                                           errorDescription:&error];

余分です。plistはすでに XML データです。

于 2013-01-18T19:44:42.687 に答える