我是Swift的新手并开始了我的第一个应用程序。
我正在尝试使用updateApplicationContext将数据从Apple手表传输到iPhone,但只会出错:
[WCSession updateApplicationContext:error:]_block_invoke failed due to WCErrorCodePayloadUnsupportedTypes
这是我的WatchKit扩展程序中的代码:
var transferData = [JumpData]()
func transferDataFunc() {
let applicationDict = ["data":self.transferData]
do {
try self.session?.updateApplicationContext(applicationDict)
} catch {
print("error")
}
}
这些是我想发送的对象结构:
class AltiLogObject {
let altitude : Float
let date : Date
init (altitude: Float) {
self.altitude = altitude
self.date = Date.init()
}
init (altitude: Float, date : Date) {
self.altitude = altitude
self.date = date
}
}
class JumpData {
let date : Date
let altitudes : [AltiLogObject]
init(altitudes: [AltiLogObject]) {
self.altitudes = altitudes
self.date = Date.init()
}
init(altitudes: [AltiLogObject], date : Date) {
self.date = date
self.altitudes = altitudes
}
}
要完成它,接收器功能的代码:
private func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
let transferData = applicationContext["data"] as! [JumpData]
//Use this to update the UI instantaneously (otherwise, takes a little while)
DispatchQueue.main.async() {
self.jumpDatas += transferData
}
}
欢迎任何提示,因为我现在试着让它运行一周以上。
答案 0 :(得分:0)
您只能通过updateApplicationContext()发送属性列表值 - documentation说明了这一点,但根本不清楚。
找到您可以发送的对象类型显然你的自定义对象类型不受支持,所以你需要做的是将属性分解为组成部分(例如你的高度和日期属性),在传递给updateApplicationContext()的applicationContext字典中单独发送它们。然后重建接收端的对象。
这当然是一种真正的痛苦,但这就是这一切都有效的方式。
HTH