我的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];
}
}
答案 0 :(得分:1)
我认为选项2将是您的最佳选择。只允许用户更改显示名称,而不是用于属性的内部名称。否则,如果你在某个时候添加了另一个字段“Foo”,但是用户已经将现有字段“Bar”重命名为“Foo”怎么办?