gpt4 book ai didi

ios - WCSession transferUserInfo 仅适用于前台

转载 作者:可可西里 更新时间:2023-11-01 02:16:24 28 4
gpt4 key购买 nike

我正在使用 WCSession 的 tranferUserInfo 在 watch 和 iOS 应用程序之间发送数据,以获取当任一产品处于后台时需要处理的信息。这在模拟器上 100% 的时间都有效,但在实际设备上却永远无效。

通过使用断点,我发现 func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) 永远不会在后台调用,但是当应用程序被带到前景。显然 session.transferUserInfo(data) 正在被调用,但在后台状态下未被接收。再次运行完全相同的代码,但在模拟器上运行完美。

我运行的是 iOS 9.3.2 和 Watch OS 2.2.1。显然,此功能旨在处理后台状态下的通信,因此我相信模拟器正在按预期工作。我尝试将发送方和接收方包装在 dispatch_async(dispatch_get_main_queue(), { block 中,但无济于事。

关于 transferUerInfo 我错过了什么,它似乎无法正常处理背景状态?

仅供引用 - 在 didRecieveUserInfo 开头设置的断点在应用进入前台之前永远不会命中。

func transferInfo(data:[String: AnyObject])
{
dispatch_async(dispatch_get_main_queue(), {
if #available(watchOSApplicationExtension 2.2, *)
{
if #available(iOS 9.3, *)
{
if self.session.activationState == .Activated
{
self.session.transferUserInfo(data)
}
else
{
NSNotificationCenter.defaultCenter().postNotificationName("alertError", object: self, userInfo: ["error":"Failed to transfer"])
}
}
else
{
self.session.transferUserInfo(data)
}
}
else
{
self.session.transferUserInfo(data)
}
})
}

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject])
{
dispatch_async(dispatch_get_main_queue(), {
for delegate in self.watchCommsProtocols
{
delegate.watchCommsDidUpdateInfo!(userInfo)
}
})
}

最佳答案

我刚刚观看了 WWDC 2015 的 Watch Connectivity session 。似乎 transferUserInfo 在应用程序处于前台之前无法被 iOS 接收。这当然是我在实际设备上看到的。那么这里的问题,以及让我失望的是,在撰写本文时,模拟器确实在后台接收到这些消息。这不是正确的行为,因此应被视为模拟器功能中的错误。

出于我的目的,当 iOS 处于后台时,我应该能够使用 sendMessage 从 watch 到 iOS。然而,反过来就不一样了。要从 iOS 向 watch 使用 sendMessage, watch 必须位于前台。

关于ios - WCSession transferUserInfo 仅适用于前台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38091088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com