Pergunta

Eu tenho um arquivo plist configurações padrão nos recursos pasta do meu aplicativo, e no primeiro lançamento que é copiado para a pasta de documentos.

Em sucessivas versões do aplicativo, como eu pode mesclar as configurações plist em seus documentos com as novas chaves e valores (possivelmente aninhados) que foram adicionadas desde a versão anterior?

Eu vi um padrão onde as propriedades são realmente criado como um NSDictionary no aplicativo (com todas as configurações padrão) e, em seguida, as configurações atuais guardados no arquivo plist está fundido com o dicionário, e que é então guardada sobre o plist atual.

É uma boa abordagem? Se sim, como você vai fazer sobre a fusão NSDictionary do que poderia ter vários valores aninhados com sub matrizes e sub dicionários?

Além disso, é aconselhável ter um arquivo plist personalizado separado para as configurações, ou você deve sempre usar NSUserDefaults? Does NSUserDefaults alça de versão e mudar padrões?

Muito obrigado,

Mike

Foi útil?

Solução

Ok, eu acho que eu vim acima com a melhor maneira de fazê-lo:

- (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];
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top