微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NSKeyedUnarchiver 总是返回 nil

如何解决NSKeyedUnarchiver 总是返回 nil

我正在尝试使用 NSKeyedArchiver 在应用程序关闭和电源循环之间存储数据。我试图存储的根对象是一个 NSMutableArray,但其中有 Foundation 和 Custom 对象的集合(所有这些都符合 NSCoding)。

文件保存代码如下

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];

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

NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory,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 方法的变体,但仍然没有用。我哪里出错了?

解决方法

解决了!

改用 InlineShape ish = document.InlineShapes[1]; ish.Fill.Solid(); ish.Fill.ForeColor.RGB = 16777215; //RGB White 并在数组和数据之间进行简单交换以存储在特定路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。