为什么方法updateApplicationContext返回“Payload包含不支持的类型。”

时间:2017-05-09 17:19:58

标签: ios swift watchkit

我正在调用方法:

 open func updateApplicationContext(_ applicationContext: [String : Any]) throws

这需要[String : Any]

我有返回的方法:

 func watchData() -> [String: Any] {
        var dictionary = [String: Any]()
        let wallets = Database.sharedInstance.database.objects(Wallet.self)
        for wallet in wallets {
            if let qrCode = QRCode(wallet.address) {
                 let watchWallet = WatchWallet(fund: wallet.fund, avaliable: wallet.avaliable, address: wallet.address, imageData: qrCode.PNGData)
                  dictionary[wallet.fund] = watchWallet
            }
        }
        return dictionary
    }

watchData()返回的数据无效。

WatchWallet是严格的。

struct WatchWallet {
    let fund: String
    let avaliable: String
    let address: String
    let imageData: Data
}

我想知道我错过了什么。

方法错误:

无法发送应用程序上下文:Error Domain = WCErrorDomain Code = 7010“Payload包含不受支持的类型。” UserInfo = {NSLocalizedDescription = Payload包含不受支持的类型。,NSLocalizedRecoverySuggestion =仅传递有效类型。}

1 个答案:

答案 0 :(得分:2)

来自:https://developer.apple.com/library/content/documentation/General/Conceptual/WatchKitProgrammingGuide/SharingData.html

  

对于大多数类型的传输,您提供了一个NSDictionary对象   您要发送的数据。字典的键和值必须   都是属性列表类型,因为数据必须序列化   无线发送。 (如果您需要包含不属性的类型   列表类型,将它们打包在NSData对象中或将它们写入文件   在发送之前。)

因此,字典[String: Any]这一事实具有误导性,因为Any值仅限于有效的属性列表类型。完整的类型列表在下面的文章中,但正如您所料,包括基本类型,数组,字典和NSData:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html