更新&アプリの新しいバージョンで設定plistファイルを変更する
-
05-07-2019 - |
質問
アプリのリソースフォルダーにデフォルト設定のplistファイルがあり、最初の起動時にドキュメントフォルダーにコピーされます。
アプリの次のバージョンでは、ドキュメントのplist設定を新しいキーと&前のバージョン以降に追加された値(ネストされている可能性があります)?
プロパティが実際にアプリでNSDictionaryとして作成され(すべてのデフォルト設定)、plistファイルに保存されている現在の設定がそのディクショナリにマージされ、それが現在のplist。
それは良いアプローチですか?その場合、複数のネストされた値を持つ可能性のあるNSDictionaryをサブ配列およびサブ辞書とマージするにはどうすればよいですか?
また、設定用に個別のカスタムplistファイルを用意することをお勧めしますか、それとも常にNSUserDefaultsを使用する必要がありますか? NSUserDefaultsはバージョン管理とデフォルトの変更を処理しますか?
どうもありがとう、
マイク
解決
さて、私はそれを行うための最良の方法を思いついたと思います:
- (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];
}
}
所属していません StackOverflow