質問

アプリのリソースフォルダーにデフォルト設定の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];
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top