首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSKeyedArchiver保存NSDate对象

使用NSKeyedArchiver保存NSDate对象
EN

Stack Overflow用户
提问于 2013-06-27 05:07:27
回答 1查看 1.5K关注 0票数 0

我有一个NSDate对象

代码语言:javascript
复制
NSDate* time = [NSDate date];

我正在尝试使用NSKeyedArchiver保存它,方法如下

代码语言:javascript
复制
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];

我使用下面的代码加载它

代码语言:javascript
复制
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的苹果文档,看起来我应该做对了,但我可能一如既往地遗漏了一些明显的东西。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-06-27 05:13:33

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17330451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档