【问题标题】:How to edit a plist programmatically?如何以编程方式编辑 plist?
【发布时间】: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

【问题讨论】:

    标签: objective-c nsarray nsdictionary plist


    【解决方案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 您无法更新应用资源包中的任何文件。它是只读的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多