如何以编程方式编辑 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?