Watchkit 与 iPhone 应用共享数据,NSInvalidUnarchiveOperationException

Watchkit sharing data with iPhone app, NSInvalidUnarchiveOperationException

从我的 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)'

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

未经进一步检查,您的 'Country' class 似乎不符合 NSCoding 协议。

NSHipster 没有用长篇大论的解释让你感到困惑,而是有一个很棒的页面,它解释了如何实现 NSCoding 并使你的对象存档友好。

我强烈推荐它。

http://nshipster.com/nscoding/