更新和改变与一个应用程序的新版本设置的plist文件(Updating & changing set

2019-08-31 12:15发布

我有我的应用程序的资源文件夹中的默认设置plist文件,并就被复制到文件夹中的第一次发射。

在应用程序的后续版本,我怎么能在上次的版本已添加任何新的密钥和值(可能是嵌套)在合并个人文件中的plist设置?

我看到那里的属性是否为一个NSDictionary在应用程序中创建(所有默认设置)的模式,然后保存在plist文件的当前设置合并与字典,然后被保存在当前的plist。

这是一个好方法吗? 如果是这样,你怎么去有关合并的NSDictionary的,可以有子阵列和子字典几个嵌套的价值观?

此外,有建议有设置一个单独的自定义plist文件,或者你应该总是使用NSUserDefaults的? NSUserDefaults的是否处理版本控制和改变默认设置?

非常感谢,

麦克风

Answer 1:

好吧,我想我已经拿出来做到这一点的最好办法:

- (void)readSettings {

    // Get Paths
    NSString *defaultSettingsPath = [[NSBundle mainBundle] pathForResource:@"DefaultSettings" ofType:@"plist"];
    NSString *settingsPath = [self.applicationDocumentsPath stringByAppendingPathComponent:@"Settings.plist"];

    // Read in Default settings
    self.settings = [NSMutableDictionary dictionaryWithContentsOfFile:defaultSettingsPath];

    // Read in Current settings and merge
    NSDictionary *currentSettings = [NSDictionary dictionaryWithContentsOfFile:settingsPath];
    for (NSString *key in [currentSettings allKeys]) {
        if ([[self.settings allKeys] indexOfObject:key] != NSNotFound) {
            if (![[currentSettings objectForKey:key] isEqual:[self.settings objectForKey:key]]) {

                // Different so merge
                [self.settings setObject:[currentSettings objectForKey:key] forKey:key];

            }
        }
    }

}

- (void)saveSettings {
    if (self.settings) {
        NSString *settingsPath = [self.applicationDocumentsPath stringByAppendingPathComponent:@"Settings.plist"];
        [self.settings writeToFile:settingsPath atomically:YES];
    }
}


文章来源: Updating & changing settings plist files with new versions of an app