Question

Bon, bien sûr, il est possible, ce n'est pas question. Dans mon code, j'ai plusieurs objets que je travaille, et ils doivent être données persistantes. Pour ce faire, je l'ai utilisé le codage d'objets et de les stocker dans un fichier de données. Tels que:

-(NSString *)dataFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:kFilename];
}

Et puis plus loin dans une autre section de code:

NSMutableData *data = [[NSMutableData alloc] init];
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        NSLog(@"Test 4");
        [archiver encodeObject:playerTwo forKey:@"PlayerTwoObject"];
        [archiver encodeObject:singlePlayer forKey:@"SinglePlayer"];
        [archiver encodeObject:playerOne forKey:@"PlayerOneObject"];
        [archiver encodeObject:settings forKey:@"Settings"];


        [archiver finishEncoding];
        [data writeToFile:[self dataFilePath] atomically:YES];
        [singlePlayer release];
        [playerOne release];
        [playerTwo release];
        [settings release]; 

Et qui sauve les objets. Je sais que cela fonctionne, parce que je peux les prendre avec ce code:

unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:[[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]];
    SettingsObject *settings = [unarchiver decodeObjectForKey:@"Settings"];
    Player *test = [unarchiver decodeObjectForKey:@"PlayerOneObject"];
    NSLog(@"Power On Settings Test: %d,%d", [settings playerOneStartingLife], [settings singlePlayerStartingLife]);
    NSLog(@"Power On Player Test: %@,%d", [test name], [test life]);

Cool! Alors maintenant, je peux stocker mes objets, et les lire. C'est donc là la question entre en jeu. Dans une autre classe, je sors un des objets que je suis stocker et travailler avec elle. Pas tous, je ne lis sur un. Et puis je l'enregistrer à nouveau après que je change les paramètres. Mais je vous attaquerez seulement il:

NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:singlePlayer forKey:@"SinglePlayer"];
    [archiver finishEncoding];
    [data writeToFile:[self dataFilePath] atomically:YES];
    [singlePlayer release];

Après que je l'ai fait, tout le reste des objets que j'ai stockés sont supprimés. Maintenant, je suis confus, parce que je pensais que je ne l'une éditais clé « SinglePlayer », mais apparemment que le reste en quelque sorte enlève d'entre eux? Est-ce censé arriver à se produire? J'ai eu quelques problèmes avec la libération du archiveur, cela affecterait du tout ... Je ne le pense pas. Quelqu'un at-il une idée à ce sujet, parce que je ne veux pas avoir à prendre tous les objets et de les ré-encoder si je veux seulement modifier un d'entre eux ...

Merci pour votre aide!

Était-ce utile?

La solution

Vous créez un nouveau archiveur, avec un objet de données emtpy. Vous écrivez l'objet SinglePlayer dans les données, mais vous ne stockez pas le reste des données dans la même archive nouvellement créée.

Pour ce faire, désarchiver l'ensemble de l'archive précédemment enregistré, puis réglez l'objet monojoueur et archive et enregistrez-le à nouveau.

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