【发布时间】:2017-09-06 10:47:46
【问题描述】:
我在我的 iOS 应用和它的 Apple Watch 扩展中都声明了这个结构
struct nonIndexStruct {
let name: [String]
let message: [String]
}
我创建一个这样的对象
let nIS = nonIndexStruct(name: sortedNameArray.map({ ($0 ).name }), message: sortedNameArray.map({ ($0 ).name }))
为了将它传递给我的 Apple Watch 扩展程序,我将对象放入一个字典中
let chatsMasterDict:[String: Any] = ["chatsMaster": nIS]
打印这个工作得很好,所有数据都在这个对象中可用。要发送它,我打电话给
session.sendMessage(chatsMasterDict, replyHandler: nil, errorHandler: nil)
现在的问题是 Apple Watch 端什么都没有。 errorHandler 仅在 Apple Watch App 未打开时打印一些内容。 (关于手表应用没有打开)
Apple Watch 上的接收方法如下所示,它会打印接收到的所有内容 - 除了上面显示的情况,该方法根本不会被调用。
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
print("didReceive")
print (message)
if let val = message["chatsMaster"]{
print("chatsMaster came")
. . .
我最好的猜测是,虽然结构对两个系统都可用,但两者之间的桥梁并不“知道”它,也无法处理它。关闭应用程序时,我也得到 p>
无法将“__NSCFString”(0x12e9fe0) 类型的值转换为“NSArray”(0x12ea670)。 2017-09-06 12:23:24.237016+0200 APPNAME WatchKit Extension[20802:3718623] 无法将“__NSCFString”(0x12e9fe0)类型的值转换为“NSArray”(0x12ea670)。
但同样,这只会在我停止进程时发生,所以我想知道这是否与我的问题有关。
编辑:Apple Watch 文档说
你的字典的键和值必须都是属性列表 类型,因为数据必须序列化并无线发送。
所以这可能就是它不起作用的原因。最好的解决方法是什么?让它Data 有点矫枉过正,我想我的结构的内容非常简单:/
【问题讨论】:
标签: ios swift watchkit watchos