我正在使用WCSession的“tranferUserInfo”在手表和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(),{”块中,但无济于事。
关于“transferUerInfo”及其似乎无法与后台状态正常工作的问题,我错过了什么?
FYI - 在“didRecieveUserInfo”的开头设置的断点直到将应用程序带入前台时才会被触发。
通过使用断点,我发现在后台从未调用“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(),{”块中,但无济于事。
关于“transferUerInfo”及其似乎无法与后台状态正常工作的问题,我错过了什么?
FYI - 在“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)
}
})
}