使用NSKeyedArchiver保存NSDate对象

时间:2013-06-26 21:07:27

标签: ios nskeyedarchiver saving-data

我有一个NSDate对象

NSDate* time = [NSDate date];

我正在尝试使用NSKeyedArchiver使用以下

保存它
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *saveFile = [[paths objectAtIndex:0] stringByAppendingPathComponent: @"GameData.dat"];

NSMutableData *gameData = [NSMutableData data];
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData: gameData];

[encoder encodeObject: time forKey: @"time"];

[encoder finishEncoding];

[gameData writeToFile:saveFile atomically:YES];

我使用以下

加载它
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *file = [[paths objectAtIndex:0] stringByAppendingPathComponent: @"GameData.dat"];
Boolean saveFileExists = [[NSFileManager defaultManager] fileExistsAtPath:file];

NSMutableData *gameData = [NSData dataWithContentsOfFile:file];
NSKeyedUnarchiver *decoder [[NSKeyedUnarchiver alloc] initForReadingWithData:gameData];

time = [decoder decodeObjectForKey: @"time"];

此方法适用于所有非对象数据类型,但它始终为对象返回nil。我阅读了NSKeyedArchiver的苹果文档,看起来我应该做得对,但一如既往,我可能会遗漏一些明显的东西。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

将所有对象发送到存档程序后,您需要向其发送finishEncoding消息,以便它可以完成数据流。

您还可以查看+archivedDataWithRootObject:上的便捷方法+archiveRootObject:toFile:NSKeyedArchiver。有了这个,您可以用一行替换大部分代码。对于NSKeyedUnarchiver,有可用的模拟方法。