是否有可能使用对象的归档存储多个对象?
-
23-09-2019 - |
题
好了,当然这是可能的,这是没有问题的。在我的代码我有我的工作与多个对象,他们需要持久性数据。要做到这一点,我使用的对象编码并将其存储在数据文件中。如:
-(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]);
酷!所以,现在我可以存储我的对象,并读出来。 因此,这是问题的用武之地。的在不同的班级我拿出我存储的对象和工作,它的一个。不是所有的人,我只宣读了一个。然后我重新保存后,我改变设置。但我只保存:
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];
我已经做了之后,的所有其余对象我已存储的被删除。现在我很困惑,因为我觉得我只是编辑一键通“单人”,但显然这在某种程度上消除他们的休息吗?是supossed发生什么呢?我曾与解除存档的一些问题,会影响到它在所有...我不认为它会。有没有人有这方面的一些见解,因为我不希望有采取所有的对象并重新编码他们,如果我只是想给他们一个编辑...
感谢您的帮助!
解决方案
您创建一个新的归档,与emtpy数据对象。你写数据的单人对象,但你不要将其他数据存储在同一个,新创建的归档。
要做到这一点,取消归档整个先前存储的存档,然后调整单人对象和归档,并保存它一次。
不隶属于 StackOverflow