0

如果我的 plist 字典数组不存在(appDidFinishLaunching),它会从捆绑包复制到文档目录。

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

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

我想过两个选择:

1:将现有字典中的字符串与更新字典中的字符串进行比较,并在不触及用户定义的字符串的情况下替换更改的字符串。还要寻找新的词典。

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

我认为 nr 2 将是最简单的方法。但这是我的第一个应用程序,所以我不确定..

所以我的问题是:选项2是个好方法吗?如果是,则接受确认作为答案。如果不是,我想这是因为您看到了一些潜在的麻烦,如果不是 nr 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];
    }
}
4

1 回答 1

1

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

于 2012-08-20T15:04:46.243 回答