もちろん、それは可能ですが、それは問題ではありません。私のコードには、使用する複数のオブジェクトがあり、それらはデータ永続的である必要があります。そのために、オブジェクトエンコーディングを使用してデータファイルに保存しました。そのような:
-(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つだけを編集したい場合は、すべてのオブジェクトを取り出して再エンコードする必要がないため、誰かがこれについて何らかの洞察を持っていますか...
ご協力いただきありがとうございます!