将 NSDictionary 写入我的应用程序包中的 plist

Posted

技术标签:

【中文标题】将 NSDictionary 写入我的应用程序包中的 plist【英文标题】:writing NSDictionary to plist in my app bundle 【发布时间】:2010-03-23 17:34:45 【问题描述】:

我正在尝试将 NSDictionary 写入 plist,但是当我打开 plist 时,没有数据写入其中。 从日志来看,我的路径看起来是正确的,而且我的代码非常标准。 有什么想法吗?

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

for (id key in dictionary) 
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);


NSString *path = [[NSBundle mainBundle] pathForResource:@"FormData" ofType:@"plist"];
NSLog(@"path:%@", path);

[dictionary writeToFile:path atomically:YES];

【问题讨论】:

【参考方案1】:

Johan 是对的——您不能修改应用的捆绑包。保存字典的位置有两个不错的选择:文档目录,当用户同步他们的设备时由 iTunes 备份;或未备份的缓存目录。如果您不需要备份数据,请将其放入缓存中,以免减慢同步速度。您可以像这样获取目录路径:

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

【讨论】:

我认为这可能需要额外的信息,因为存在文档共享。来自 Apple:“如果您不想与用户共享文件,请将它们放在应用程序的 Library 目录中。如果标准 Library 子目录都不合适,请在 Library 目录中创建一个私有目录,并为其命名应用程序的包 ID。然后,您可以使用该目录来存储您的应用程序私有的任何文件。"【参考方案2】:

它没有被保存,因为您无法写入应用程序的捆绑包。将您的文件保存在其他地方,例如在文档文件夹中。

【讨论】:

以上是关于将 NSDictionary 写入我的应用程序包中的 plist的主要内容,如果未能解决你的问题,请参考以下文章

无法将 NSDictionary 参数写入自定义对象

带有 JSON 格式字符串的文件,如何将文件内容读入 NSDictionary

iOS - 将 NSDictionary 写入 Localizable.strings

将 id3 元数据写入应用程序包中的 mp3 文件

我可以使用核心数据读取和写入主包中的数据库吗?

替换嵌套 NSDictionary 中出现的 NSNull