与plist的奇怪的bug

时间:2012-10-28 22:33:32

标签: iphone ios xcode plist title

当我试图阅读我的plist时,我遇到了一个非常奇怪的错误。 我的plist看起来像:

Root (Array)
            Item 0 (Dictionary)
                              title (String)

我想在日志中显示title,所以我做了以下代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSString *path = [basePath stringByAppendingPathComponent:@"data.plist"];
NSMutableDictionary *dict = [[NSDictionary dictionaryWithContentsOfFile:path] mutableCopy];

NSLog(@"%@", [dict objectForKey:@"title"]);

NSLog(@"Path to plist: %@", path);

使用此代码,NSLog(@"%@", [dict objectForKey:@"title"]);等于“(null)”...

我的plist在我的app的文档文件夹中,path的日志返回了我的plist的好路径。

请帮帮我:)。

2 个答案:

答案 0 :(得分:0)

你的plist的根是一个数组,但你把它读成字典,那是行不通的。

你应该:

  • 将plist读入数组
  • 获取项目0(objectAtIndex:0) - >这是一本字典
  • 在这本词典上你可以执行objectForKey ...

答案 1 :(得分:0)

正如@Tom所说,(正如你在第一个代码块中所说的那样),plist的根是一个数组。

您可以使用以下方式非常类似地加载数组:

NSArray *array = [NSArray arrayWithContentsOfFile:path];

然后你可以像这样访问索引0(字典)中的项目:

NSDictionary *dict = [array objectAtIndex:0];

或者从Xcode 4.4开始,使用新的数组文字:

NSDictionary *dict = array[0];

然后按照您的尝试记录标题:

NSLog(@"%@", [dict objectForKey:@"title"]);

或使用新语法:

NSLog(@"%@", dict[@"title"]);