【问题标题】:Watchkit sharing data with iPhone app, NSInvalidUnarchiveOperationExceptionWatchkit 与 iPhone 应用共享数据,NSInvalidUnarchiveOperationException
【发布时间】:2015-02-07 23:42:33
【问题描述】:

从我的 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 watchkit


【解决方案1】:

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

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

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

我强烈推荐它。

http://nshipster.com/nscoding/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多