【发布时间】:2012-02-24 15:44:51
【问题描述】:
抱歉,我看到了类似的问题,但他们似乎没有给我一些完整的答案。我试着把它整理好,这样人们就不会讨厌我或我糟糕的英语。
我正在使用带有故事板和 ARC 的 Xcode 4.2
我可以从我的 plist 文件中读取。我的任务只是将更新后的值写回到我的 plist 文件中。
我的 plist 包含在主文件夹的“支持文件”子文件夹中(故事板所在的位置)。该文件是调用 Global.plist 和 GlobalValue2 是文件类型字符串的一个元素。
所以读取的文件部分是这样的
NSString *plistfile = [[NSBundle mainBundle] pathForResource:@"Global" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:plistfile];
FirstValueTextBox.text = [[dict valueForKey:@"GlobalValue1"] stringValue];
从一些方便的 youtube 视频中学习就可以了。将值更新到我的文本框。
当我写回我的 plist 文件时,真正的问题出现了。当我尝试以下
NSString *plistfile = [[NSBundle mainBundle] pathForResource:@"Global" ofType:@"plist"];
NSMutableDictionary *dict = [NSMutableDictionary
dictionaryWithContentsOfFile:plistfile];
[dict setValue:@"ABC" forKey:@"GlobalValue2"];
SecondValueTextBox.text = [dict valueForKey:@"GlobalValue2"];
[dict writeToFile:plistfile atomically:YES];
结果是我真的看到第二个文本框弹出了一个更新的值,但 plist 文件保持不变。
以下是我的问题分解和我对问题的猜测
我尝试使用 NSDictionary(不是 NSMutableDictionary)并调用 setValue(运行时崩溃)
我的猜测: NSDictionary 对象本身是只读的,所以当我说添加值时它会让我崩溃。但是为什么在编码时它不会出错呢?如果对象是只读的我使用 NSMutableDictionary 可以调用 setValue。它不会让我崩溃,当我在 "SecondValueTextBox.text = [dict valueForKey:@"GlobalValue2"];" 调用更新的值时它真的返回了我更新的值。但是 plist 文件中的内容没有改变。这是我现在得到的结果。
我的猜测:在这里和那里进行一些搜索后,我认为“支持文件”也是只读的。纯粹的猜测确实看到有人直接谈论它。我确实尝试过更进一步,有些人谈到 Xcode 中的“文档文件夹”,它是一个读写的地方。我认为人们还谈论编写代码来访问该文件夹。有人可以在这里给我看代码吗?
我的最后一个问题是,我可以将我的 Xcode 连接到那个“文档文件夹”还是在哪里可以看到它(我认为真正的文件夹结构与 Xcode 内部不同)。这样我就可以查看和编辑我的 plist 文件进行测试,并且我可以在不使用代码和其他东西的情况下看到真实的结果
如果人们能告诉我我的猜测是对是错以及我的第 3 和第 4 个问题的答案,我将不胜感激。
【问题讨论】:
标签: iphone xcode plist nsdictionary