Хорошо, конечно, это возможно, это не проблема. В моем коде у меня есть несколько объектов, с которыми я работаю, и они должны быть постоянными данными. Для этого я использовал объектную кодировку и сохранил их в файле данных. Такие как:
-(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]);
Cool! Так что теперь я могу хранить свои объекты и читать их. Итак, вот в чем проблема. В другом классе я вынимаю один из сохраняемых объектов и работаю с ним. Не все из них, я только один зачитал. И затем я сохраняю его снова после изменения настроек. Но я только сохраняю это:
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», но, видимо, это как-то удаляет остальные? Это должно случиться? У меня были некоторые проблемы с выпуском архиватора, это могло бы повлиять на это вообще ... Я не думаю, что это произойдет. У кого-нибудь есть понимание этого, потому что я не хочу вынимать все объекты и перекодировать их, если я только хочу отредактировать один из них ...
Спасибо за вашу помощь!