将NSDictionary保存为plist

Ash*_*ggs 13 cocoa objective-c nsdictionary plist

我正在使用这篇文章中的代码:来自Plist的多个数组,具有相同的plist格式.

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

我怎么做到这一点?

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

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

Joh*_*eek 24

这是最简单的方法:

NSDictionary* dict = ...;
[dict writeToFile:@"..." atomically:YES];
Run Code Online (Sandbox Code Playgroud)

请参阅文档-writeToFile:atomically:.

  • 你试过吗?它可以向plist写入任何可以从plist中读取的内容.除非你改变了在字典中订购数据的方式,否则它应该以完全相同的方式写出来. (6认同)
  • **最重要的** - 此方法在写入之前递归地验证所有包含的对象是属性列表对象("NSData","NSDate","NSNumber","NSString","NSArray"或"NSDictionary"的实例) out文件,如果所有对象都不是属性列表对象,则返回"NO",因为生成的文件不是有效的属性列表. (2认同)

Jha*_*iya 16

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

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

你可以在这里扫描路径并myPlistFile.plist使用for循环搜索.

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];
Run Code Online (Sandbox Code Playgroud)

  • 它可以,但前提是用户具有管理员权限且应用程序未经过代码签名.修改应用程序包被认为是不好的做法. (3认同)
  • @Ashley从技术上讲,bundle仅对App Store目标应用程序是只读的.如果不是这种情况,应用程序可以写入其捆绑包. (2认同)