![](/img/trans.png)
[英]WatchOS2 WCSession sendMessage doesn't wake iPhone on background
[英]watchOS can't sendMessage() a struct
我的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 Extension,我將該對象放入字典中
let chatsMasterDict:[String: Any] = ["chatsMaster": nIS]
打印此文件效果很好,該對象中的所有數據均可用。 要發送,我打電話
session.sendMessage(chatsMasterDict, replyHandler: nil, errorHandler: nil)
現在的問題是,Apple Watch上沒有任何東西。 僅當未打開Apple Watch App時,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-09-06 12:23:24.237016 + 0200 APPNAME WatchKit Extension [20802:3718623]無法將類型'__NSCFString'(0x12e9fe0)的值強制轉換為'NSArray'(0x12ea670)。
但是同樣,只有當我停止該過程時,才會發生這種情況,以至於這是否與我的問題有關。
編輯:Apple Watch文檔說
字典的鍵和值都必須是屬性列表類型,因為數據必須進行序列化並以無線方式發送。
所以這可能就是為什么它不起作用的原因。 最好的解決方法是什么? 由於我的結構內容非常簡單,所以我想將其轉換為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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.