我想知道什么时候会在手表和iOS设备上的WCSession对象上调用activateSession()。
在文档中说:
在调用任何与会话相关的方法之前,始终指定一个委托并激活您的会话。必须先配置并激活会话,然后才能发送消息或获取有关连接状态的信息。
一开始以为我把我的代码用于初始化会话:
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
在iOS设备上的 viewDidLoad 中,以及在手表端的 willActivate 中。
它有效...... 但我不认为这是一个很好的解决方案。 我对应用程序生命周期还不太熟悉,但据我所知,每次打开应用程序时都会调用它们。
这会导致"重新连接"每次打开其中一个应用程序?
放置该代码的好地方在哪里?
答案 0 :(得分:10)
当您将WCSession
代码放入viewDidLoad
和willActivate
时,不仅会在应用程序打开时调用,而且每次都会显示包含代码的视图控制器。所以这不是一个理想的地方。
放置此代码的最佳位置是application:didFinishLaunchingWithOptions
在您应用的AppDelegate
和applicationDidFinishLaunching
的观看扩展程序ExtensionDelegate
< / p>
您可以将所有会话处理放入单个类中,正如tutorial @NatashaTheRobot中所建议的那样。
这样,会话仅在应用程序保存在内存中时创建一次。
修改强>
正如ccjensen在评论中指出的那样,如果您使用连接进行并发症,通知或 Glance 更新你必须在ExtensionDelegate的init
方法中激活会话。在这些情况下不会调用applicationDidFinishLaunching
。