通过 sendMessage 发送一个巨大的字典 - WatchKit
Sending a huge dictionary via sendMessage - WatchKit
我的目标是从 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)
}
I cannot transfer (>100kb) the large dictionary via sendMessage (just relatively small ones)
PayloadTooLarge
错误是 already mentioned。
如果您实施了正确的错误处理程序,您会看到 sendMessage
失败,因为您超出了可以在消息中发送的数据量。
session.sendMessage(message, replyHandler: nil, errorHandler: { (error) -> Void in
print("sendMessage failed with error \(error)")
})
替代方法:
发送如此大量的数据并使用户承受很长的加载时间是不切实际的。
如果可能,您应该将任何 preloaded/static 数据捆绑在手表包中,这样一开始就不需要传输。
如果没有其他方法需要在 phone 和 watch 之间传输如此大量的数据,您将需要使用 transferFile:metadata:
(仅受手表上剩余的 space 个限制)。
我的目标是从 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)
}
I cannot transfer (>100kb) the large dictionary via sendMessage (just relatively small ones)
PayloadTooLarge
错误是 already mentioned。
如果您实施了正确的错误处理程序,您会看到 sendMessage
失败,因为您超出了可以在消息中发送的数据量。
session.sendMessage(message, replyHandler: nil, errorHandler: { (error) -> Void in
print("sendMessage failed with error \(error)")
})
替代方法:
发送如此大量的数据并使用户承受很长的加载时间是不切实际的。
如果可能,您应该将任何 preloaded/static 数据捆绑在手表包中,这样一开始就不需要传输。
如果没有其他方法需要在 phone 和 watch 之间传输如此大量的数据,您将需要使用
transferFile:metadata:
(仅受手表上剩余的 space 个限制)。