【问题标题】:Xcode crashes with Unrecognized selector when trying to use NSKeyedArchiver.archiveRootObject尝试使用 NSKeyedArchiver.archiveRootObject 时 Xcode 因无法识别的选择器而崩溃
【发布时间】: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


【解决方案1】:

如果您还没有,请确保您的对象从 NSObject 继承自 this 之前的帖子。

【讨论】:

猜你喜欢
  • 2015-01-08
  • 1970-01-01
  • 2011-03-11
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2019-10-24
相关资源
最近更新 更多