Frage

Okay, natürlich ist es möglich, das ist kein Problem. In meinem Code habe ich mehrere Objekte, die mit denen ich arbeite, und sie benötigen, um Daten persistent. Zu tun, dass ich verwendet habe, Objekt kodieren und sie in einer Datei zu speichern. Wie zum Beispiel:

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

Und dann weiter entlang in einem anderen Abschnitt des Codes:

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]; 

Und das spart die Objekte. Ich weiß, dass es funktioniert, weil ich sie mit diesem Code übernehmen kann:

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! So, jetzt kann ich meine Objekte speichern und lesen sie aus. Also das ist, wo das Problem kommt. In einer anderen Klasse nehme ich eines der Objekte aus mir der Speicherung und die Arbeit mit ihm. Nicht alle von ihnen, ich lese nur einer. Und dann speichere ich es wieder, nachdem ich die Einstellungen ändern. Aber ich nur speichert es:

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];

Nachdem ich das getan habe, die ganzen Rest der Objekte I gespeichert werden entfernt. Jetzt bin ich verwirrt, weil ich dachte, ich war nur die Bearbeitung der einen Schlüssel „Singleplayer“, aber anscheinend irgendwie den Rest von ihnen entfernt? Ist das supossed geschehen? Ich habe einige Probleme habe mit dem Archivierungs Freigabe, würde das beeinflusst es überhaupt ... Ich glaube nicht, es wäre. Hat jemand einen kleinen Einblick auf das, weil ich nicht haben wollen alle die nehmen Objekte und Wieder kodieren sie, wenn ich nur zu bearbeiten eine von ihnen wollen ...

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Sie erstellen ein neues Archivierungs, mit einem emtpy Datenobjekt. Sie schreiben das Singleplayer-Objekt in den Daten, aber Sie speichern nicht den Rest der Daten in dem gleichen, neu erstellte Archiv.

Dazu unarchive das ganze vorher gespeicherten Archiv, dann stellen Sie das Singleplayer-Objekt und zu archivieren und speichern Sie es erneut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top