簡體   English   中英

watchOS無法sendMessage()結構

[英]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:37186​​23]無法將類型'__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM