iPhone iOS 5上的读/写plist

时间:2012-04-25 15:32:42

标签: ios5 plist

我正在研究iPhone开发并遇到读/写plist文件的问题。我从iPhone开发书中了解了一个示例,但在运行时不断收到错误消息。

错误消息显示:2012-04-26 00:21:09.759 FileHandling [5915:207] - [__ NSCFDictionary addObject:]:无法识别的选择器发送到实例0x685ac40

这是示例代码(对我来说似乎很好......):

NSString *plistFileName = [[self documentPath] stringByAppendingPathComponent: @"Apps.plist"];
NSLog(@"Where is the file? => %@", plistFileName);

if ([[NSFileManager defaultManager] fileExistsAtPath:plistFileName]) {
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistFileName];

    for (NSString *category in dict) {
        NSLog(@"%@", category);
        NSLog(@"=========");

        NSArray *titles = [dict valueForKey:category];

        for (NSString *title in titles) {
            NSLog(@"%@", title);
        }
    }
} else {
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Apps" ofType: @"plist"];       
    NSLog(@"%@", plistPath);
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile: plistPath];
    NSLog(@"Let's take a look : %@", dict); 
    NSMutableDictionary *copyOfDict = [dict mutableCopy];
    NSLog(@"Let's look at the mutable dictationary : %@", copyOfDict);
    NSArray *categoriesArray = [[copyOfDict allKeys] sortedArrayUsingSelector: @selector(compare:)];

    for (NSString *cateogry in categoriesArray) {
        NSArray *titles = [dict valueForKey: cateogry];
        NSMutableArray *mutableTitles = [titles mutableCopy];

        [mutableTitles addObject: @"New App Title"];

        [copyOfDict setObject: mutableTitles forKey:cateogry];
    }

    NSString *fileName = [[self documentPath] stringByAppendingPathComponent: @"Apps.plist"];
    [copyOfDict writeToFile: fileName atomically:YES];
}

1 个答案:

答案 0 :(得分:1)

根据错误消息,addObject:__NSCFDictionary的调用发生问题。这意味着,在运行时,字典会收到添加对象的消息。

但是,在此代码段中,addObject:显然正在发送给NSMutableArray。这可能意味着您在最后一个for循环中从titles检索的每个对象dict都不是数组,而实际上是另一个字典,您的代码只是将其称为数组。 / p>

实际上,您的代码看起来确实很好,因此请检查源plist的格式良好;在纯文本编辑器中打开它。此外,您使用 ton 日志记录,因此请按以下方式确认:在输出中,字典(包括根条目)由{curly = braces}表示,其中数组由{{1}表示}。