0

当我试图阅读我的 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 在我的应用程序的文档文件夹中,并且path将良好路径返回到我的 plist 的日志。

请帮帮我 :)

4

2 回答 2

0

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

你应该:

  • 将 plist 读入数组
  • 获取项目 0 (objectAtIndex:0) -> 这是一个字典
  • 在这本词典上,您可以执行 objectForKey ...
于 2012-10-28T22:37:09.313 回答
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"]);
于 2012-10-28T22:40:41.980 回答