在使用Swift解压缩时,我会得到以下异常:
由于“NSInvalidUnarchiveOperationException”异常终止应用程序,原因:‘* -NSKeyedUnarchiver decodeObjectForKey::无法为键(NS.objects)解码类对象(NSKnownKeysDictionary1);类可以在源代码或未链接的库中定义
上下文:我正在创建一个“共享链接”扩展。在我的主应用程序(用目标C编写)中,我用MMWormhole编写了一组字典,其中包含有关链接的信息。
NSFetchRequest* bookmarkFetch = [NSFetchRequest fetchRequestWithEntityName:@"XX"];
bookmarkFetch.propertiesToFetch = @[
@"name", @"text", @"date", @"url"
];
bookmarkFetch.resultType = NSDictionaryResultType;
NSArray* bookmarks = [moc executeFetchRequest:bookmarkFetch error:NULL];
[wormhole passMessageObject:bookmarks identifier:@"XXX"];数组中的值是NSStrings和NSDate。
在MMWormhole的肚子里你可以得到:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:messageObject];messageObject只是书签数组,没有任何中间处理。
在分机处,我有:
let wormhole = MMWormhole(applicationGroupIdentifier: "group.XX", optionalDirectory:nil)
let bookmarks = wormhole.messageWithIdentifier("XXX") as? Array<Dictionary<String,AnyObject>>messageWithIdentifier:最终将其称为:
id messageObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];数组被正确地写入应用程序组文件夹--我可以使用另一个扩展名读取它,其中一个扩展名写在目标C中。
当我在模拟器中运行时,会出现此异常。在32位设备(iPhone 5和iPad 3)上运行时,代码似乎工作正常.我目前没有64位设备可供测试。
我想我缺少了一个import或一个框架,但是哪一个呢?
发布于 2015-10-13 15:09:20
我在Apple论坛和苹果开发者关系部()的得到一个好的答案上问过这个问题。我将引用重要的部分:
NSKnownKeysDictionary1是一个我不明白的核心数据巫毒。..。显然,它的序列化和反序列化出现了问题。你在虫洞两端都有核心数据吗?无论如何,对书签数组进行深度复制(以及其他从Core Data获得的内容)可能更有意义,这样您就可以通过“连线”而不是通过Core数据发送标准字典。
因此,我的解决方案要么将核心数据框架添加到扩展中,要么进行深度复制。(我暂时做了前者。正确的解决办法可能是后者。)
发布于 2016-06-26 12:11:40
这只是一个附带说明:
您可以为NSKeyedArchiver & NSKeyedUnarchiver设置类名。在没有处理CoreData的情况下,我遇到了这个问题。档案管理员再也找不到我自己的班级了。
设置我的类的className如下所示:
对于archiver
NSKeyedArchiver.setClassName("MyClass", for: MyClass.self)
let data = NSKeyedArchiver.archivedData(withRootObject: root)和unarchiver
NSKeyedUnarchiver.setClass(MyClass.self, forClassName: "MyClass")
let root = NSKeyedUnarchiver.unarchiveObject(with: data)https://stackoverflow.com/questions/33015794
复制相似问题