gpt4 book ai didi

ios - 导入为框架后,NSKeyedUnarchiver encodeObjectForKey崩溃

转载 作者:行者123 更新时间:2023-12-01 17:20:04 25 4
gpt4 key购买 nike

在将MyClass拉入框架之前,我可以将MyClass实例保存到Core Data中。

这是MyClass的实现:

open class MyClass: NSObject, NSCoding {
required public init?(coder aDecoder: NSCoder) {
super.init()
stuffs = aDecoder.decodeObject(forKey: "stuff") as? [Stuff] ?? []
}

open func encode(with aCoder: NSCoder) {
aCoder.encode(stuffs, forKey: "stuffs")
}
}

在将 MyClass放入CocoaPods的框架中之后,我开始遇到这些崩溃:
CoreData: error: exception handling request: <NSSQLFetchRequestContext: 0x1c019d4d0> , *** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (MyClass) for key (NS.objects); the class may be defined in source code or a library that is not linked with userInfo of {
"__NSCoderInternalErrorCode" = 4864;
}

知道为什么吗?

最佳答案

通过将此类移至框架中,您已经更改了其全名。之前是MyApp.MyClass之类的东西,但现在是MyFramework.MyClass。键控归档不知道它们是相同的,这就是导致您出现问题的原因。删除并重新安装可以解决问题,因为不再需要解码任何旧数据。

您可以使用setClass(:forClassName:告诉取消归档的过程如何解决冲突,从而控制类/名称的匹配。你会做类似的事情

NSKeyedUnarchiver.setClass(MyClass.self, forClassName: "MyApp.MyClass")

这样可以解决解码问题。为了保持双向编码/解码工作,您可能需要对归档执行相同的操作,例如
NSKeyedArchiver.setClassName("MyApp.MyClass", for: MyClass.self)

关于ios - 导入为框架后,NSKeyedUnarchiver encodeObjectForKey崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45290063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com