5

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

在文档中它说:

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

起初以为我把我的代码初始化会话:

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

在iOS 设备上的viewDidLoad和手表端的willActivate中。

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

每次打开其中一个应用程序时,这是否会导致“重新连接”?

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

4

1 回答 1

11

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

放置此代码的最佳位置是application:didFinishLaunchingWithOptions在您的应用程序AppDelegateapplicationDidFinishLaunching手表扩展程序中ExtensionDelegate

正如@NatashaTheRobot的这篇精彩教程中所建议的那样,您可以将所有会话处理放入一个单例类中。

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

编辑

正如ccjensen在他的评论中指出的那样,如果您将连接用于ComplicationNotificationGlance更新,则必须在 ExtensionDelegate 的init方法中激活会话。applicationDidFinishLaunching在这些情况下不会被调用。

于 2015-10-16T11:58:58.897 回答