Tom*_*ton 7 iphone ios nskeyedunarchiver 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)'
Run Code Online (Sandbox Code Playgroud)
在上面,DemoNotesSwift是app名称,DemoNote是类名,并且代码行试图从NSDatablob中取消归档对象:
let savedObjects = NSKeyedUnarchiver.unarchiveObjectWithData(savedData) as? [(DemoNote)]
Run Code Online (Sandbox Code Playgroud)
我猜测移动DemoNote到框架意味着它的模块名称已经改变,这打破了unarchiving,但我不确定.我也不知道该怎么做 - 也许我需要打电话+setClass:forClassName:给unarchiver,但如果是这样的话,我不知道论证会是什么.
Tom*_*ton 15
DemoNote从应用程序移动到框架确实更改了模块名称,这意味着NSKeyedUnarchiver由于名称不匹配而找不到存档类的实例.解决方法是在取消归档之前添加此行:
NSKeyedUnarchiver.setClass(DemoNote.self, forClassName: "DemoNotesSwift.DemoNote")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,DemoNote.self获取当前的完整类名,并且DemoNotesSwift.DemoNote是该类在应用程序的一部分时被调用的类.
这只是必要的,因为我以前存在我想保留的数据.
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |