1

もちろん、それは可能ですが、それは問題ではありません。私のコードには、使用する複数のオブジェクトがあり、それらはデータ永続的である必要があります。そのために、オブジェクトエンコーディングを使用してデータファイルに保存しました。そのような:

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

そして、さらにコードの別のセクションに沿って:

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

そして、それはオブジェクトを保存します。私はそれが機能することを知っています、なぜなら私はこのコードでそれらを取り除くことができるからです:

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

涼しい!これで、オブジェクトを保存して読み取ることができます。 そこで問題が発生します。 別のクラスで、保存しているオブジェクトの1つを取り出して、それを操作します。それらのすべてではなく、私は1つだけを読みました。そして、設定を変更した後、再度保存します。しかし、私はそれを保存するだけです:

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

それを行った後、保存した残りのオブジェクトはすべて削除されます。「SinglePlayer」という1つのキーしか編集していないと思っていたので、混乱しましたが、どうやら残りのキーが削除されたようです。それは起こると思われますか?アーカイバのリリースに関していくつか問題がありましたが、それはまったく影響しません...私はそうは思わない。オブジェクトの1つだけを編集したい場合は、すべてのオブジェクトを取り出して再エンコードする必要がないため、誰かがこれについて何らかの洞察を持っていますか...

ご協力いただきありがとうございます!

4

1 に答える 1

3

emtpyデータオブジェクトを使用して、新しいアーカイバを作成します。シングルプレイヤーオブジェクトをデータに書き込みますが、残りのデータを同じ新しく作成されたアーカイブに保存しません。

これを行うには、以前に保存したアーカイブ全体をアーカイブ解除してから、SinglePlayerオブジェクトを調整してアーカイブし、再度保存します。

于 2010-02-28T18:01:47.900 に答える