【问题标题】:Sending a huge dictionary via sendMessage - WatchKit通过 sendMessage 发送一个巨大的字典 - WatchKit
【发布时间】:2016-04-17 09:36:27
【问题描述】:

我的目标是从 iOS 应用程序向 watchKit 应用程序发送一个巨大的字典(包含大约 10 个数组),但我在 watchKit 端没有得到任何输出。

如果我发送一个字符串,下面的例子可以正常工作:

let message = [ "fromParent": "some string" ]
session.sendMessage(message, replyHandler: { replyDict in }, errorHandler: { error in })

但是当我尝试发送字典时,我根本没有得到任何输出:

let message = [ "fromParent": dictionary ]
session.sendMessage(message, replyHandler: { replyDict in }, errorHandler: { error in })

这就是我在 watchKit 端打印输出的方式:

func session(session: WCSession, didReceiveMessage message: [String: AnyObject], replyHandler: [String: AnyObject] -> Void) {
guard let parentMessage = message["fromParent"] as? String else { return }
print(parentMessage)
}

【问题讨论】:

  • 你试过在 Xcode 中调试这个吗?你应该已经意识到as? String 意味着parentMessage 不会被打印出来。
  • @PetahChristian 没注意到 as 真是太愚蠢了?字符串,但无论如何 - 我无法通过 sendMessage 传输(>100kb)大字典(只是相对较小的字典)

标签: ios swift watchkit watchconnectivity wcsession


【解决方案1】:

我无法通过 sendMessage 传输(>100kb)大字典(只是相对较小的字典)

PayloadTooLarge 错误是 already mentioned

如果您实施了正确的错误处理程序,您将看到 sendMessage 失败,因为您超出了可以在消息中发送的数据量。

session.sendMessage(message, replyHandler: nil, errorHandler: { (error) -> Void in
    print("sendMessage failed with error \(error)")
})

替代方法:

发送如此大量的数据并让用户承受很长的加载时间是不切实际的。

  • 如果可能,您应该将所有预加载/静态数据捆绑到 watch bundle 中,这样一开始就不需要传输。

  • 如果没有其他方法需要在手机和手表之间传输如此大量的数据,则需要使用transferFile:metadata:(仅受手表剩余空间限制)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2020-09-20
    • 2015-09-15
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多