将 NSDictionary 保存到 plist

Posted

技术标签:

【中文标题】将 NSDictionary 保存到 plist【英文标题】:Save NSDictionary to plist 【发布时间】:2011-06-10 19:13:39 【问题描述】:

我正在使用这篇文章中的代码:Mulitple Arrays From Plist,具有相同的 plist 格式。

这很成功,但是我不知道如何以相同的格式将创建的数组保存回 plist。

我将如何实现这一目标?

编辑:我需要的不是保存,而是要保存的数据的形成。 plist 是一个包含字符串及其对应键的字典数组。 所有具有特定键的字符串都放入自己的数组中。

如何将该数组放回字典数组中的正确位置,准备保存?

【问题讨论】:

【参考方案1】:

这是最简单的方法:

NSDictionary* dict = ...;
[dict writeToFile:@"..." atomically:YES];

请参阅-writeToFile:atomically: 的文档。

【讨论】:

我知道这会保存文件,但我不认为这会将 Plist 形成的数组转换回与 array->dictionary->string 相同的方式 你试过了吗?它可以将任何可以从 plist 读取的内容写入 plist。除非您更改了在字典中排序数据的方式,否则它应该以完全相同的方式写出。 最重要的 - 此方法递归地验证所有包含的对象都是属性列表对象(NSDataNSDateNSNumberNSString 的实例, NSArrayNSDictionary) 在写出文件之前,如果所有对象都不是属性列表对象,则返回 NO,因为结果文件不是有效的属性列表。 此方法已弃用。【参考方案2】:

不要忘记创建 myPlistFile.plist 并将其添加到您的应用程序资源文件夹中。

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

您可以在此处扫描路径并使用 for 循环搜索 myPlistFile.plist

NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"myPlistFile.plist"];
if (![[NSFileManager defaultManager] fileExistsAtPath: plistPath])

          NSString *bundle = [[NSBundle mainBundle] pathForResource:@"myPlistFile" ofType:@"plist"];
          [[NSFileManager defaultManager] copyItemAtPath:bundle toPath:plistPath error:&error];

[myDict writeToFile:plistPath atomically: YES];

【讨论】:

我知道我要把它保存在哪里,但这是我需要正确的形成 @Ashley 从技术上讲,捆绑包仅对面向 App Store 的应用程序是只读的。如果不是这种情况,应用程序可以写入它的包。 它可以,但前提是用户具有管理员权限并且应用程序没有代码签名。修改 app bundle 被认为是不好的做法。 @RobKeniger 等等,我不知道这个......所以我打算写到“主包”中的一个 plist,如果这就是它的名字......那么应该我改了?? 您应该将您的 plist 存储在任何various places Apple provides for you to store things 中。【参考方案3】:

反之,从文件加载 NSDictionary:

+ (id)dictionaryWithContentsOfFile:(NSString *)path;

【讨论】:

以上是关于将 NSDictionary 保存到 plist的主要内容,如果未能解决你的问题,请参考以下文章

Swift:将 NSDictionary 保存到文件中,因为 NSUserDefaults 会变慢

如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?

从 NSDictionary 保存数据到 NSDictionary

iOS NSDictionary 保存到 NSUserDefaults 不保存值

带有 NSDictionary 的数组不想保存到 standardUserDefaults

Objective-C 将字典附加到 NSDictionary