我正在研究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];
}
答案 0 :(得分:1)
根据错误消息,addObject:
对__NSCFDictionary
的调用发生问题。这意味着,在运行时,字典会收到添加对象的消息。
但是,在此代码段中,addObject:
显然正在发送给NSMutableArray
。这可能意味着您在最后一个for循环中从titles
检索的每个对象dict
都不是数组,而实际上是另一个字典,您的代码只是将其称为数组。 / p>
实际上,您的代码看起来确实很好,因此请检查源plist的格式良好;在纯文本编辑器中打开它。此外,您使用 ton 日志记录,因此请按以下方式确认:在输出中,字典(包括根条目)由{curly = braces}
表示,其中数组由{{1}表示}。