我有一个非常简单的 Swift 应用程序,它有一个名为DemoNote
. DemoNote
通过键控归档读取/写入实例数组。DemoNote
这在包含在应用程序中时效果很好。
但后来我转向DemoNote.swift
了一个新的自定义框架,称为DemoSharedCode
. 除了确保 Xcode 在应用程序目标中使用框架之外,我还确保
- 标记
DemoNote
及其变量和方法,public
以便它们在框架之外可见 - 添加
import DemoSharedCode
到任何想要使用的类DemoNote
所以现在编译器很高兴。但在运行时,取消归档失败并出现以下错误:
2015-02-17 12:12:53.417 DemoNotesSwift[70800:16504104] *** Terminating app due to
uncaught exception 'NSInvalidUnarchiveOperationException', reason:
'*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class
(DemoNotesSwift.DemoNote)'
在上面,DemoNotesSwift
是应用程序名称,DemoNote
是类名称,并且代码行正在尝试从NSData
blob 中取消归档对象:
let savedObjects = NSKeyedUnarchiver.unarchiveObjectWithData(savedData) as? [(DemoNote)]
我猜移动DemoNote
到框架意味着它的模块名称已经改变,这会破坏取消归档,但我不确定。我也不知道该怎么办——也许我需要调用+setClass:forClassName:
unarchiver,但如果是这样,我不知道参数会是什么。