Watchkit与iPhone应用程序共享数据,NSInvalidUnarchiveOperationException

时间:2015-02-07 23:42:34

标签: nskeyedarchiver watchkit

从我的iPhone应用程序中,我通过以下方式将数据发送到我的Watch应用程序:

func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
  if let data = NSKeyedArchiver.archivedDataWithRootObject(Country()) {
    reply(["data": data])
  }
}

在我的Watch应用程序中,我正在尝试读取数据:

WKInterfaceController.openParentApplication(input, reply: { (replyValues, error) -> Void in
  if error == nil {
    if let data = replyValues["data"] as? NSData {
      if let temp = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? Country {
        println("done")
      }
    }
  }
})

抛出以下错误:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (Country)'

1 个答案:

答案 0 :(得分:1)

NSKeyedArchiver / NSKeyedUnarchiver仅适用于符合NSCoding的类。

没有进一步检查,看来你的国家' class不符合NSCoding协议。

NSHipster有一个很棒的页面,可以解释如何实现NSCoding并使你的对象存档友好。而不是让你误解长篇大论的解释。

我强烈推荐它。

http://nshipster.com/nscoding/