在 plist 中写入字典有效,然后从 plist 返回中读取字典(空)

Posted

技术标签:

【中文标题】在 plist 中写入字典有效,然后从 plist 返回中读取字典(空)【英文标题】:Write to dictionary in plist works but then read dictionary from plist returns (null) 【发布时间】:2013-01-09 23:53:17 【问题描述】:

这就是我在 viewDidLoad 方法中访问 plist 中字典的方式:

     NSString* documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
     NSString *fileName = [NSString stringWithFormat:@"Level.plist"];
     filePath = [documentsDir stringByAppendingPathComponent:fileName];
     array = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
     dict = [array objectAtIndex:1];

这很好用,然后我这样写字典:

    score = [NSString stringWithFormat:@"%d", score.integerValue + 10];
    [dict setObject:score forKey:@"Score"];
    [dict writeToFile:filePath atomically: NO];

这也可以正常工作,但是一旦我返回此视图并尝试在 viewDidLoad 方法中再次访问字典,它会为字典返回 (null)。

【问题讨论】:

【参考方案1】:

这是因为您将文件作为数组读取,但是当您再次将其写回时,您只是写出字典,而不是包含该字典的数组。如果你尝试使用 NSMutableArray 读取一个 plist 文件,它的根目录不是数组,这将导致它返回 nil。因此,如果您只是在最后一行代码中将 dict 替换为 array,那应该可以解决问题。

【讨论】:

嗨,谢谢,我后来意识到了这一点,但从未回答过我的问题。

以上是关于在 plist 中写入字典有效,然后从 plist 返回中读取字典(空)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Xcode 读取和写入具有字典数组的 Plist

iOS学习笔记13-字典数据写入plist

将嵌套字典写入 plist (Swift) 时的类型问题

从 plist 文件中读取字典的奇怪行为

搜索核心数据与 Plist

writeToFile 输出 .plist 没有写入正确的值