问题描述
我使用的是 Objective-c,macOS 而不是 iOS。
我有一个应用程序当前通过将 NSData 写入这样的路径来保存数据:
GlobalAppData * dataToSave = self.data; // based on NSObject supporting NSSecureCoding
NSKeyedArchiver* archiver=[[NSKeyedArchiver alloc] initRequiringSecureCoding:YES];
[archiver encodeObject:dataToSave forKey:@"global"];
NSData* data = [archiver encodedData];
[data writeToFile:somefilePath
atomically:YES];
用户可以双击文件并触发加载。基本上 NSDocument 用于支持自定义文档,但加载/保存由应用程序处理,因为以前的概念没有使用多个文档(只是单个)。加载代码是这样的:
NSError* err;
NSData* data = [NSData dataWithContentsOfURL:projectURL options:NSDataReadingMappedIfSafe error:&err];
NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&err];
当我尝试读取数据时,它按预期工作:
GlobalAppData * myData = [unarchiver decodeObjectForKey:@"global"];
现在我已经切换到基于文档的结构,允许多个文档。我根据NSDocument实现了保存和加载。加载现在在 NSDocument 子类中处理如下:
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:outError];
// Load appData
GlobalAppData* appData = [unarchiver decodeObjectOfClass:[GlobalAppData class] forKey:@"global"];
...
现在,当我使用新的(文档)代码WRITE 和LOAD 数据时,一切正常。 什么不起作用是加载旧文件(NSData* 用顶部的方法手动编写)。
appData 始终为零。
我想提供某种向后兼容性。这样做的正确方法是什么?我在这里错过了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)