我正在尝试向我的Watchkit扩展发送“类”,但出现此错误。
由于未捕获的异常’NSInvalidUnarchiveOperationException’而终止应用程序,原因:’
-[NSKeyedUnarchiver encodeObjectForKey:]:无法解码类(MyApp.Person)的对象
存档和取消存档在iOS App上运行良好,但在与watchkit扩展进行通信时无法正常工作。怎么了?
InterfaceController.swift
let userInfo = ["method":"getData"]
WKInterfaceController.openParentApplication(userInfo,
reply: { (userInfo:[NSObject : AnyObject]!, error: NSError!) -> Void in
println(userInfo["data"]) // prints <62706c69 7374303...
if let data = userInfo["data"] as? NSData {
if let person = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? Person {
println(person.name)
}
}
})
AppDelegate.swift
func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!,
reply: (([NSObject : AnyObject]!) -> Void)!) {
var bob = Person()
bob.name = "Bob"
bob.age = 25
reply(["data" : NSKeyedArchiver.archivedDataWithRootObject(bob)])
return
}
人智
class Person : NSObject, NSCoding {
var name: String!
var age: Int!
// MARK: NSCoding
required convenience init(coder decoder: NSCoder) {
self.init()
self.name = decoder.decodeObjectForKey("name") as! String?
self.age = decoder.decodeIntegerForKey("age")
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
coder.encodeInt(Int32(self.age), forKey: "age")
}
}
注: 虽然这个答案的信息是正确的, 方法 更好的答案是低于@agy之一。
这是由编译器在同一类中创建MyApp.Person
&引起的MyAppWatchKitExtension.Person
。这通常是由于在两个目标之间共享同一类
而不是 创建一个框架来共享而引起的。
两种修复:
正确的解决方法是提取Person
到框架中。主应用程序和watchkit扩展都应使用该框架,并且将使用同一*.Person
类。
解决方法是NSDictionary
在保存并传递类之前将您的类序列化为Foundation对象(如)。在NSDictionary
将代码与跨解码应用和扩展两者。做到这一点的一个好方法是改为实施RawRepresentable
协议Person
。
问题内容: 我在JSON方面遇到问题,我似乎无法弄清为什么它不起作用。这应该输出JSON。 这是我的代码 我收到这个错误 如果有人可以救援,那就太好了! 问题答案: 看来您的JSON无效。在这种情况下,这完全取决于服务器发送给您的数据(您未显示)。我建议通过JSON验证程序运行响应。
我有一个json转储为 我编写了一个小代码来从json获取一些详细信息 这给我造成了错误: 回溯(最近一次调用):文件“python_opennms.py”,第24行,in x=get_nodes_opennms()文件“python_opennms.py”,第15行,in get_nodes_opennms for i in JSON.load(open('out.txt'))[“alarm”]
问题内容: 我的文件在第一行都有编码定义器,就像我的 正如我在相关问题上提到的那样,我用来返回api文档。由于我通过以下方式定义编码: 一切正常,当我调用我的API服务时,除了 由pprint由字典形成的字符串 外 , 没有任何编码问题 __ 由于我在字典中的某些值中使用土耳其语字符,因此pprint将其转换为等效的字符,例如: 我的纯文本输出如下: 我尝试将pprint输出解码或编码为不同的编码
相反,马文没有做到这一点。。 …在项目中的每个类类型上(不仅仅是上面提到的)。 如何将IntelliJ配置为成功? [与此类似,但不完全相同的问题(尽管可能有帮助)]: 为什么这么红?IntelliJ似乎认为每个声明/方法都无法找到/解决 听起来像是[错误?]的措辞,“导入时无法解析符号”与我的类似,但不同(“无法解析java.lang.Object类型。它是从必需的.class文件中间接引用的”
我已经部署了一个CloudFirebase函数来更新一些聚合数据,但是我得到了 聚合收据评级:错误:无法从文件快照中的消防恢复值解码类型:{“integerValue”:“3”}。_decodeValue(/user_code/node_modules/Firebase-admin/node_modules/@google-Cloud/消防恢复/src/document.js:464: 15)在D
我的主要问题是我得到一个错误,说明:在第80行: 第80行是