无法编辑程序生成的 iOS plist
Posted
技术标签:
【中文标题】无法编辑程序生成的 iOS plist【英文标题】:Unable to edit program generated iOS plist 【发布时间】:2011-01-11 20:09:17 【问题描述】:我正在我的 ios 应用程序中创建一个 plist,它在应用程序第一次运行时填充了一些默认值(因为该文件不存在)。现在,我正在尝试在更改某些信息后测试一个案例。如果我在 OS X 的属性列表编辑器中打开 iPhone 模拟器应用程序文档文件夹 (~/Library/Application Support/iPhone Simulator/4.2/Applications/SOME-LONG-HASH/Documents/mystuff.plist) 中的 plist 文件,请进行更改,然后保存,iOS 应用无法重读并覆盖它,就好像它不存在一样。
无法编辑 iOS plist 还是我做错了?我似乎在 Apple 的文档中找不到任何内容。
作为参考,我正在保存这样的 NSDictionary
[NSKeyedArchiver archiveRootObject:dict toFile:myFilePath];
然后像这样访问它
NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithFile:myFilePath];
【问题讨论】:
【参考方案1】:如果你的字典只包含字符串、数字、数组和字典,你应该使用 NSDictionary 方法 writeToFile:atomically: 和 initWithContentsOfFile: 来保存和加载数据。您的问题可能是由 Property List Editor 以 XML 格式编写文件而 NSKeyedUnarchiver 使用二进制格式引起的。如果您在应用程序中另存为...,则可以指定类型。
【讨论】:
我仔细检查了,属性列表编辑器以读取它的格式保存了一个 plist。不过,为了确定,我打开了一个由我的应用程序生成的新副本,修改了我存储的 BOOL对更改感兴趣(基本上未选中),保存为并确保选择了二进制文件。我仍然遇到同样的问题,其中 NSKeyedUnarchiver 在应用程序中返回 nil 并且使用默认值重新生成 plist。我会尝试 writeToFile 和 initWithContentsOfFile 但字典中的值是我自己的类并且都使用 NSCoding 所以我不确定它是否会工作。 如果你使用自己的类,你必须像以前一样使用归档器。 密钥归档器不使用 plist 格式。它使用编辑器将打开的类似格式,但在保存时编辑器将保存为 plist,解压器无法读取。以上是关于无法编辑程序生成的 iOS plist的主要内容,如果未能解决你的问题,请参考以下文章
如何从 iOS 单元测试中获取不同的 info-plist?
iOS 应用程序无法查询方案“comgooglemaps”,尽管我在 info plist 的 LSApplicationQuery 中添加了“comgooglemaps”