在我的应用程序的下一个版本之前更改plist - 如何管理更改?

时间:2012-08-20 14:59:07

标签: objective-c

我的plist词典数组从包中复制到文档目录(如果它尚不存在)(appDidFinishLaunching)。

字典中的某些字符串是用户定义的,并且在用户设置值之前具有默认值。 (即Key:“Favorite”值:“No”如果添加到收藏夹,则更改为“Yes”)

如果我更改某些词典中的某些字符串(例如,如果对象价格发生变化)和/或向数组中添加一些新词典,那么如何管理这些更改而不更改用户定义的字符串?

我考虑过两个选择:

1:将激活字典中的字符串与更新后的字典中的字符串进行比较,并替换已更改的字典,而不触及用户定义的字符串。还要寻找新的词典。

2:为用户定义的字符串创建一个新的词典列表,即“Name”字符串等于主要对象,以便在显示内容时它们可以“连接”。然后可以替换主plist并且用户定义的数据保持不变。

我认为2号是最简单的方法。但这是我的第一个申请,所以我不确定。

所以我的问题是:选项2是一个好方法吗?如果是,则接受确认作为答案。如果不是,我想这是因为你看到了一些潜在的麻烦,请解释一下,如果不是1,可以建议其他方法。

聚苯乙烯。复制的当前代码:

- (void)copyPlist {
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Objects.plist"];
     NSLog(@"Path %@", path); 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path])
    {
        NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Objects" ofType:@"plist"];

        [fileManager copyItemAtPath:bundle toPath:path error:&error];
    }
}

1 个答案:

答案 0 :(得分:1)

我认为选项2将是您的最佳选择。只允许用户更改显示名称,而不是用于属性的内部名称。否则,如果你在某个时候添加了另一个字段“Foo”,但是用户已经将现有字段“Bar”重命名为“Foo”怎么办?