Salvar informações adicionais para um plist cada vez que eu executar o aplicativo? (Iphone)

StackOverflow https://stackoverflow.com/questions/1201620

Pergunta

O meu iphone app escreve pares chave-valor a um dicionário em um arquivo plist. Estou basicamente salvar a pontuação do usuário quando eles jogam o jogo. Isto é tudo muito bem e dândi, mas cada vez que eu executar o aplicativo e obter novas pontuações, os novos valores são salvos sobre os valores antigos. Como faço para adicionar informações ao plist cada vez que o usuário acessa o aplicativo em vez de reescrever o arquivo? Quero manter todas as pontuações, não apenas o mais recente.

código:

-(void)recordValues:(id)sender {

    //read "propertyList.plist" from application bundle
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path
                          stringByAppendingPathComponent:@"propertyList.plist"];
    dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];

    //create an NSNumber object containing the
    //float value userScore and add it as 'score' to the dictionary.
    NSNumber *number=[NSNumber numberWithFloat:userScore];
    [dictionary setObject:number forKey:@"score"];

    //dump the contents of the dictionary to the console 
    for (id key in dictionary) {
        NSLog(@"memory: key=%@, value=%@", key, [dictionary
                                                 objectForKey:key]);
    }

    //write xml representation of dictionary to a file
    [dictionary writeToFile:@"/Users/rthomas/Sites/propertyList.plist" atomically:NO];
}
Foi útil?

Solução

Você está definindo o objeto para um número de pontuação chave

    NSNumber *number=[NSNumber numberWithFloat:userScore];   
 [dictionary setObject:number forKey:@"score"];

Em vez disso o que você quer fazer é ter uma matriz ou algo do tipo assim

NSNumber *number=[NSNumber numberWithFloat:userScore];  
    NSMutableArray *array=[dictionary objectForKey:@"score"]
     [array addObject:number]
    [dictionary setObject:array forKey:@"score"]

este deve fazer o que você está pedindo

Outras dicas

Você deseja carregar os valores antigos em primeiro lugar, em um NSArray ou NSDictionary como Daniel disse.

O que você adicionar o novo valor para a coleção. (Talvez fazer alguma triagem ou algo também)

Em seguida, você escreve a nova coleção de volta para o disco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top