首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSKeyedUnarchiver始终返回nil

NSKeyedUnarchiver始终返回nil
EN

Stack Overflow用户
提问于 2021-04-09 21:32:06
回答 1查看 31关注 0票数 0

我正在尝试使用NSKeyedArchiver在关闭应用程序和重启电源之间存储数据。我试图存储的根对象是一个NSMutableArray,但是在这个根对象中有基础对象和自定义对象的集合(它们都符合NSCoding)。

文件保存代码如下

代码语言:javascript
复制
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullFileName = [NSString stringWithFormat:@"%@/sessionDataSaveFile",documentsDirectory];
    
NSMutableData *pData = [[NSMutableData alloc] init];
    
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initRequiringSecureCoding:NO];
[archiver encodeObject:self.sessionData];
[archiver finishEncoding];
[pData appendData:[archiver encodedData]];
[pData writeToFile:fullFileName atomically:YES];

文件保存得很好,没有抛出异常。再次启动应用程序时,将使用以下代码恢复此文件。

代码语言:javascript
复制
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullFileName = [NSString stringWithFormat:@"%@/sessionDataSaveFile", documentsDirectory];

NSData *pData = [[NSData alloc] initWithContentsOfFile:fullFileName];
NSError *error = nil;
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:pData error:&error];
self.sessionData = [unArchiver decodeObject];
[unArchiver finishDecoding];

在这一点上,sessionData总是为零,但是pData有几千字节长,因此我知道问题出在解码方法上。我尝试过[[NSMutableArray alloc] initWithCoder]和几乎所有NSKeyedUnarchiver方法的变体,但仍然没有用。我哪里错了?

EN

回答 1

Stack Overflow用户

发布于 2021-04-09 22:11:59

解决了!

切换到使用NSFileManager,并在数组和数据之间进行简单的交换,以存储在特定路径上。

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

https://stackoverflow.com/questions/67022078

复制
相关文章

相似问题

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