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 并使你的对象存档友好。
我强烈推荐它。
从我的 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 并使你的对象存档友好。
我强烈推荐它。