【发布时间】:2018-11-19 03:20:58
【问题描述】:
我的 JSON 对象没有被发送到我的 WKInterfaceTable。
UITableView 填充正确。最后一步是填充 WKInterfaceTable。该代码没有在 Xcode 中引发错误,但由于强制转换失败而导致运行时崩溃。
编辑:感谢 Dale,我修复了错误处理行,因此运行时消息消失了,但同样的问题仍然存在。
打印LoadedData:可选() P>
override func willActivate() {
super.willActivate()
if(WCSession.default.isReachable) {
let message = ["getMsgData" : [:]]
WCSession.default.sendMessage(message, replyHandler:
{ (result) -> Void in
print("Requesting data from phone")
print("printing message: \(message)")
print("printing messageObjects: \(self.messageObjects)")
if result["messageData"] != nil {
let loadedData = result["messageData"]
NSKeyedUnarchiver.setClass(MessageObject.self, forClassName: "MessageObject")
do {
let loadedPerson = try? JSONDecoder().decode(MessageObject.self, from: loadedData as! Data)
self.messageObjects = [loadedPerson]
self.progTable.setNumberOfRows(self.messageObjects.count, withRowType: "MsgRowController")
//code...
}
【问题讨论】:
-
如果 loadedPerson 为 nil 即解码失败,则转换将失败。而不是使用尝试?你应该正确处理错误。
-
谢谢。将其更改为
let loadedPerson = try JSONDecoder().decode,然后更改为self.messageObjects = [loadedPerson]。我注意到 MessageInterfaceController 中的print("Sending a message to the phone asking it for data")正在打印到控制台,但 WKInterfaceTable/rows 仍然没有显示。所以willActivate中的某些内容肯定是错误的。不再出现运行时崩溃,但表数据未显示。 -
你应该单独调试你的 JSON 解码。错误消息确实在告诉您问题所在 - 它无法解析 JSON,因为它的格式不正确。看起来您的 JSON 是一个数组,但您要求解码单个对象。尝试使用 [MessageObject].self 作为 JSONDecoder().decode 中的类型。然后,loadedPerson 将是一个数组,您可以直接将其分配给 self.messageObjects 而无需包含在 [ ]
-
你好戴尔。实际上我只是重构了我的 Codable 模型,当我这样做时,我发现问题是我在两个 VC 中都有以前的 NSKeyedArchiver/Unarchiver 方法,所以它基本上停止了我的应用程序,因为它不知道是使用 NSKeyed 还是 JSONDecoder。 Xcode 没有给出任何错误,没有任何警告。我只需要做一些重构就可以自己找出问题所在。感谢您的提示。当我这样做时,Xcode 也警告我要更改您提到的区域。
标签: swift codable watchconnectivity wcsession wkinterfacetable