添加了自定义框架,现在Swift无法解压缩数据
我有一个非常简单的Swift应用程序,它有一个名为DemoNote
的模型类。 通过键控归档读取/写入一组DemoNote
实例。 这个工作正常,而DemoNote
包含在应用程序中。
但后来我将DemoNote.swift
移动到一个名为DemoSharedCode
的新自定义框架。 除了确保Xcode在app目标中使用框架之外,我确保
- 将
DemoNote
及其变量和方法标记为public
以便它们在框架之外可见 - 将
import DemoSharedCode
添加到任何想要使用DemoNote
所以现在编译器很高兴。 但在运行时,unarchiving失败并出现此错误:
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
移动到框架意味着它的模块名称已经改变,这打破了unarchiving,但我不确定。 我也不知道该怎么办 – 也许我需要在unarchiver上调用+setClass:forClassName:
但是如果是这样的话我不知道参数是什么。
将DemoNote
从应用程序移动到框架确实更改了模块名称,这意味着由于名称不匹配, NSKeyedUnarchiver
无法找到已归档类的实例。 解决方法是在取消归档之前添加此行:
NSKeyedUnarchiver.setClass(DemoNote.self, forClassName: "DemoNotesSwift.DemoNote")
在这种情况下, DemoNote.self
获取当前的完整类名,而DemoNotesSwift.DemoNote
是该类在应用程序的一部分时被调用的内容。
这只是必要的,因为我以前存在我想保留的数据。