何时在WCSession对象

时间:2015-10-16 10:37:23

标签: swift lifecycle watch-os-2 wcsession

我想知道什么时候会在手表和iOS设备上的WCSession对象上调用activateSession()。

在文档中说:

在调用任何与会话相关的方法之前,始终指定一个委托并激活您的会话。必须先配置并激活会话,然后才能发送消息或获取有关连接状态的信息。

一开始以为我把我的代码用于初始化会话:

 if (WCSession.isSupported()) {
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }

在iOS设备上的 viewDidLoad 中,以及在手表端的 willActivate 中。

它有效...... 但我不认为这是一个很好的解决方案。 我对应用程序生命周期还不太熟悉,但据我所知,每次打开应用程序时都会调用它们。

这会导致"重新连接"每次打开其中一个应用程序?

放置该代码的好地方在哪里?

1 个答案:

答案 0 :(得分:10)

当您将WCSession代码放入viewDidLoadwillActivate时,不仅会在应用程序打开时调用,而且每次都会显示包含代码的视图控制器。所以这不是一个理想的地方。

放置此代码的最佳位置是application:didFinishLaunchingWithOptions在您应用的AppDelegateapplicationDidFinishLaunching的观看扩展程序ExtensionDelegate < / p>

您可以将所有会话处理放入单个类中,正如tutorial @NatashaTheRobot中所建议的那样。

这样,会话仅在应用程序保存在内存中时创建一次。

修改

正如ccjensen在评论中指出的那样,如果您使用连接进行并发症通知 Glance 更新你必须在ExtensionDelegate的init方法中激活会话。在这些情况下不会调用applicationDidFinishLaunching