NSDataFromURL 与 NSDocument 中的 NSData 不同?

问题描述

我使用的是 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"];

...

现在,当我使用新的(文档)代码WRITELOAD 数据时,一切正常。 什么不起作用是加载旧文件(NSData* 用顶部的方法手动编写)。

appData 始终为零。

我想提供某种向后兼容性。这样做的正确方法是什么?我在这里错过了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...