2017-05-09 61 views
0

我打電話方法:爲什麼方法updateApplicationContext返回「Payload包含不受支持的類型」。

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是strcut。

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

我想知道我在想什麼。從方法

錯誤:

無法發送應用程序上下文:錯誤域= WCErrorDomain代碼= 7010「的有效載荷包含不支持的類型。」的UserInfo = {NSLocalizedDescription =淨荷中包含不支持的類型,NSLocalizedRecoverySuggestion =只有通過有效的類型。}

+0

@jlew THX但錯誤是一樣 –

回答

1

來源: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

+0

所以我的結構應該只使用列表中的數據類型? –

+0

不完全。字典不得包含「WatchWallet」作爲值。你應該把它轉換成字典,並把它放在'WatchWallet'的地方: 'dictionary [wallet.fund] = [「fund」:wallet.fund,「available」:wallet.available,..等等。 ..]' – jlew

+0

thx的幫助。 –

相關問題