Plist不保存从字典(到文档)

sky*_*erl 2 iphone documents save nsdictionary plist

我一直在尝试将NSDictionary的plist保存到我的应用程序的Documents文件夹中.我还没有在设备上试过这个,但是我希望它可以在模拟器上进行测试.该[self createDictionaryFromChoreList]方法只是从我的另一个类中的某些数据创建一个NSDictionary.我几乎从Web文档中复制/粘贴了这段代码,当我去查看文件是否已保存时,我发现它不是.这是方法块.

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *plistName = [[NSString alloc] initWithFormat:@"%@chores.plist", self.firstName];
NSString *path = [documentsDirectory stringByAppendingPathComponent:plistName];

NSDictionary *choresDictionary = [[NSDictionary alloc] initWithDictionary:[self createDictionaryFromChoreList]];
[choresDictionary writeToFile:path atomically:YES];
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.提前致谢.

-S

Tec*_*Zen 5

您还应该捕获返回的BOOL writeToFile:atomically:.这将告诉您写入是否成功.

此外,您确定要查找正确的文档文件夹吗?如果您在模拟器中有多个应用程序,则很容易在Finder中打开错误的应用程序文档文件夹.我这样做了一次,这让我感到沮丧几个小时.

Edit01:

writeToFile:atomically:返回false解释了为什么没有文件存在.最简单的解释是字典中的某些东西不是属性列表对象.

来自NSDictionary文档:

在写出文件之前,此方法以递归方式验证所有包含的对象是属性列表对象(NSData,NSDate,NSNumber,NSString,NSArray或NSDictionary的实例),如果所有对象都不是属性列表对象,则返回NO,因为结果文件不是有效的属性列表.

它只需要将一个非plist对象深埋在字典中,以防止它被转换为plist.