如何以编程方式编辑 plist?

Posted

技术标签:

【中文标题】如何以编程方式编辑 plist?【英文标题】:How to edit a plist programmatically? 【发布时间】:2016-09-08 17:37:24 【问题描述】:

我有一个编辑 plist 文件的代码。但是当代码运行时,它会更改 plist 文件,但会删除一些其他字典。您可以查看图像以了解我的意思。

要查看已编辑的单词,请查看字典“item 1”和字符串“name”。您会看到它需要从“Second”更改为“newVALUE”。

原始 plist 是 plist 创建时的图像。 然后你就有了 expected plist,这就是 plist 的样子。而edited plist是应用代码后的plist。

这是代码:

NSString *plistPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
plistPath = [plistPath stringByAppendingPathComponent:@"PassaveData.plist"];

NSMutableArray*  newContent = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];
NSMutableDictionary *Dict = [[NSMutableDictionary alloc]initWithDictionary:[newContent objectAtIndex:1]];
[Dict setValue:@"newVALUE" forKey:@"name"];
[Dict writeToFile:plistPath atomically:YES];

这些是图片

Click to see the images

【问题讨论】:

【参考方案1】:

您的原始 plist 包含一个字典数组。您创建一个新字典,然后仅用一个新字典覆盖原始的基于数组的 plist。

您需要使用更新的字典更新加载的数组,然后写出整个更新的数组。

NSMutableArray *newContent = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
NSMutableDictionary *dict = [newContent[1] mutableCopy];
dict[@"name"] = @"newVALUE";
newContent[1] = dict;
[newContent writeToFile:plistPath atomically:YES];

注意数组和字典使用现代语法。

【讨论】:

我认为它的更新数据只在文档目录中而不是在原始 .piist 文件中。 假设我想在第一次构建后更改应用名称,我该如何更改?我已经尝试 [plistDict setValue:@"com.xyz.Getdata" forKey:@"CFBundleIdentifier"]; [plistDict setValue:@"Getdata" forKey:@"CFBundleName"]; [plistDict setValue:@"MyProject" forKey:@"CFBundleDisplayName"]; @BhumeshPurohit 您无法更新应用资源包中的任何文件。它是只读的。

以上是关于如何以编程方式编辑 plist?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xcode 5 iOS 7 中以编程方式编辑 plist?

如何以编程方式删除 plist?

如何以编程方式从 plist 添加和检索数据

如何在 iphone 中以编程方式创建 PLIST 文件

如何在 iPhone 中以编程方式在 plist 文件中添加多个数组

在文档目录中找不到 plist 文件?如何以编程方式修改 plist?