watchOS不能的sendMessage()
我有这样的结构在我的iOS应用程序和它的Apple关注扩展都宣布为结构watchOS不能的sendMessage()
struct nonIndexStruct {
let name: [String]
let message: [String]
}
我创建这样
let nIS = nonIndexStruct(name: sortedNameArray.map({ ($0).name }), message: sortedNameArray.map({ ($0).name }))
在一个对象为了将它传递给我的苹果手表扩展,我把对象写成字典
let chatsMasterDict:[String: Any] = ["chatsMaster": nIS]
打印这个工作完全正常,所有数据都可以在这个对象。要发送的话,我打电话
session.sendMessage(chatsMasterDict, replyHandler: nil, errorHandler: nil)
现在的问题是,没有到达的Apple关注的一面。 errorHandler仅在Apple Watch应用程序未打开时打印某些内容。 (关于手表的应用程序没有被打开)
对苹果关注的接收方法是这样的,它打印收到的一切 - 除了上面显示的情况下,该方法根本不被调用。
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
print("didReceive")
print (message)
if let val = message["chatsMaster"]{
print("chatsMaster came")
. . .
我最好的猜测是,虽然结构是可用于两个系统,之间的桥梁并不“知道”它并不能处理它。当关闭应用程序时,我也得到
无法将'__NSCFString'(0x12e9fe0)类型的值转换为'NSArray'(0x12ea670)。 2017年9月6日12:23:24.237016 + 0200 APPNAME WatchKit扩展[20802:3718623]无法投类型 '__NSCFString'(0x12e9fe0)的值设为 '的NSArray'(0x12ea670)。
但是,只有当我停止该过程时,才会发生这种情况,因此idk是否与我的问题有关。
编辑:Apple关注文档说
键和你的字典里的值必须全部财产清单 类型,因为数据必须串行化和无线发送。
所以这可能是为什么它不工作。什么是最好的解决方法?使它Data
会有点矫枉过正我猜想,因为我的结构的内容是非常简单的:/
这真的很奇怪,你没有得到一个错误,但问题的核心是,你正试图发送使用sendMessage
功能,只能用于发送属性列表类型的自定义结构。
最好的解决方案是(因为你的结构非常简单,它的所有属性都是属性列表类型)可能会将你的结构转换为字典并使用sendMessage
来设置字典。
struct nonIndexStruct {
let name: [String]
let message: [String]
func toDictionary()->[String:[String]]{
var dict = [String:[String]]()
dict["name"] = self.name
dict["message"] = self.message
return dict
}
}
let chatsMasterDict = ["chatsMaster": nIS.toDictionary()]
session.sendMessage(chatsMasterDict, replyHandler: nil, errorHandler: nil)
完美的解决方案,正是我所需要的!你忘了返回类型后面的括号,但这是完美的,非常感谢! – user2875404
很高兴我能帮到你。感谢您的更正,我用括号更新了我的答案。 –