今晚想把之前新手教程里的ToDoList拿出来,添加退出保存数据的功能,本来以为只需要简单地调用一个写数据函数就可以搞定,没想到竟然也折腾了好久。用
NSDictionary的writeToFile方法一直保存不成功。
代码非常简单,就只有几行:
NSDictionary *fileData=@{@"name":@"joe", @"gender":@"male", @"age":@24};
if([fileData writeToFile:@"myDictionaryData.plist" atomically:YES])
NSLog(@"Write OK!");
死活就是看不到Write OK,把代码单独拿出来放到命令行程序里去跑还是不行。百度了一下保存plist的方法,代码也完全一样,文件名前面多了一个斜杠,加上去,还是不行,改得我一肚子火。后来看到有人说权限问题,把路径改到文档(/Users/joe/Documents/myDictionaryData.plist),终于看到Write OK,瞬间泪流满面。从C转过来,固态思维地觉得直接保存在当前目录理所当然,结果就被无情打脸了。
在命令行程序成功后要应用到ios上,总不能把用户数据直接保存到document上吧,直接保存在程序的目录下面又没有权限怎么办?百度了一下,原来ios采用了沙盒机制,把用户数据保存到指定目录下面。
关于plist保存成Array和Dictionary的区别:
一开始以为两种方式没什么区别,以为Array其实就是key为item0,1,2..的Dictionary(博主就是这么天真,勿拍
),想把保存为Dictionary的plist直接读到Array里面,发现读不进来,想把plist的key改为item0,1,2试试,却发现Array的key怎么都改不了,一不小心瞥见中间type那里Array和Dictionary,瞬间Orz。。。

关于保存数据失败的原因:
大部分保存失败的原因都是没有权限,这时候你需要仔细地检查一下你保存的地址有没有错,比如少打了一个斜杠之类的。另外还有一个原因就是NSArray和NSDictionary无法保存自定义的对象。