Domanda

Ho un file plist delle impostazioni predefinite nella cartella delle risorse della mia app e al primo avvio che viene copiato nella cartella documenti.

Nelle versioni successive dell'app, come posso unire le impostazioni di plist nei loro documenti con qualsiasi nuovo tasto & amp; valori (possibilmente nidificati) che sono stati aggiunti dalla versione precedente?

Ho visto un modello in cui le proprietà vengono effettivamente create come NSDictionary nell'app (con tutte le impostazioni predefinite), quindi le impostazioni correnti salvate nel file plist vengono unite a quel dizionario e quindi salvate sul attuale plist.

È un buon approccio? In tal caso, come si fa a fondere NSDictionary che potrebbe avere diversi valori nidificati con sotto array e sotto dizionari?

Inoltre, si consiglia di avere un file plist personalizzato separato per le impostazioni o si dovrebbe sempre usare NSUserDefaults? NSUserDefaults gestisce il versioning e la modifica delle impostazioni predefinite?

Mille grazie,

Mike

È stato utile?

Soluzione

Okay penso di aver trovato il modo migliore per farlo:

- (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];
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top