【发布时间】:2015-10-12 09:44:03
【问题描述】:
我有一个自定义的 Swift 类,它使用 NSKeyedArchiver 将数据写入文件系统。这个类中完成这项工作的功能之一是:
func writeDataToArchive (data: AnyObject) {
let dirPath = "\(currentPath)/\(fileName)"
//----
NSKeyedArchiver.archiveRootObject(data, toFile: dirPath)
}
然后我像这样调用这个函数,传递一段数据来保存:
let dataToWrite: [NoteItem] = Hub.allNotes
metaData.writeDataToArchive(dataToWrite)
当我运行我的程序时,Xcode 在这一行崩溃
NSKeyedArchiver.archiveRootObject(data, toFile: dirPath)
带有以下错误消息:
2015-10-12 05:25:39.949 MyApp[86437:4755070] *** NSForwarding: 警告:类 'MyApp.NoteItem' 的对象 0x7fe5ba5533c0 没有 实现 methodSignatureForSelector: -- 前面的麻烦 Unrecognized 选择器 -[MyApp.NoteItem replacementObjectForKeyedArchiver:]
根据错误消息,尝试将我的自定义对象写入设备似乎是个问题。当我使用其他标准数据类型(如 Int、String 等)时……它们工作得很好,所以使用自定义对象似乎是个问题。我该如何解决这个问题?
【问题讨论】:
-
NoteItem是如何定义的? -
注意项目里面有一堆变量和函数。我想我实际上可能已经解决了我的问题,正在做更多的研究并找到了这个优秀的帖子,到目前为止它已经修复了崩溃。仍在尝试检索结果以确认它有效stackoverflow.com/questions/32536227/…
-
这很酷。我想你在实现自己的模型时可能会错过
NSCoding。 -
是的,简而言之,我缺少 NSCoding 和所需的协议。经过快速测试,现在一切正常。
标签: ios swift xcode7 nskeyedarchiver