Wlance接口中的WCSession(Watch OS 2.0)

时间:2015-08-18 15:33:43

标签: ios watchkit watch-os-2

我正在尝试使用消息传递(watchOS 2.0中引入的新WatchConnectivity的一部分)。在我的扫视控制器中,我有。

-(void)willActivate {
    [super willActivate];

    if ([WCSession isSupported]) {
        WCSession *session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
    }

}

这在主界面中工作,虽然在模拟器中实际可以到达几秒钟。我通过检查sessionReachabilityDidChange:来监控可达性。但是只有在我的浏览界面中它永远不会变得可达。如果没有它可以访问我无法从手机中检索数据。有没有人碰到这个?也许这只是一个模拟器问题。我正在使用xCode 7 Beta 5.

谢谢!

2 个答案:

答案 0 :(得分:2)

只有一个共享的WCSession对象,它只有一个委托,因此在应用程序的init / willActivate中设置两次,然后在Glance init / willActivate中设置它将导致问题。

可行的方法是在WKExtensionDelegate的init方法中设置它

class ExtensionDelegate: WKExtensionDelegate, WCSessionDelegate{

   let TAG : String = "ExtensionDelegate: "
   let session = WCSession.defaultSession()

   override init () {
       super.init()

       println("\(TAG) - init")
       println("\(TAG)Setting delegate and Activating WCSession.defaultSession()...")

       session.delegate = self
       session.activateSession()
   }

   .
   .
   .
}

答案 1 :(得分:1)

在您的会话可以访问之前,您可以与updateApplicationContext:进行通信。

因此,您可以在iOS端检查手表是否可以访问,如果没有,则使用updateApplicationContext:设置一些应用程序上下文数据,当用户开始使用watchkit应用程序时,这些数据将可用于手表。或者甚至一眼就可以使用这个上下文数据。

当您调用willActivate方法时,您可以设置WCSession委托,并激活会话。当会话被激活时,它将调用你的session:didReceiveApplicationContext:回调与之前设置的appcontext数据。在此之后,您可以使用sendMessage,因为此时您的手表是可以访问的。 请注意,不会在主线程上调用updateApplicationContext方法。

在另一个方向,您可以使用手表中的sendMessage方法在后台唤醒您的iOS应用程序。这意味着您必须在iOS端的appdelegate中设置WCSession。

可访问状态需要iOS应用程序和监视应用程序(或一瞥)正在运行。

有关详细信息,请查看WWDC Session 713:Watch Connectivity简介