Enregistrer des informations supplémentaires sur un plist chaque fois que je lance l'application? (iphone)

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

Question

Mon application iphone écrit des paires clé-valeur dans un dictionnaire dans un fichier plist. Je sauvegarde essentiellement le score de l'utilisateur lorsqu'il joue. Tout va bien, mais à chaque fois que je lance l'application et que je reçois de nouveaux scores, les nouvelles valeurs sont sauvegardées par rapport aux anciennes. Comment ajouter des informations à la liste à chaque fois que l'utilisateur accède à l'application au lieu de réécrire le fichier? Je veux conserver tous les scores, pas seulement le plus récent.

code:

-(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];
}
Était-ce utile?

La solution

Vous définissez l'objet avec un nombre pour le score clé

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

Au lieu de cela, ce que vous voulez faire est d'avoir un tableau ou quelque chose du genre pour que

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

cela devrait faire ce que vous demandez

Autres conseils

Vous voulez d'abord charger les anciennes valeurs, dans un NSArray ou NSDictionary, comme l'a dit Daniel.

Vous ajoutez la nouvelle valeur à la collection. (peut-être faire un tri ou quelque chose aussi)

Vous écrivez ensuite la nouvelle collection sur le disque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top