Когда вызывать activSession() для объекта WCSession
Интересно, в какой момент можно было бы вызвать activSession() для объекта WCSession на часах и на устройстве iOS.
В документации сказано:
Всегда назначайте делегата и активируйте сеанс перед вызовом любых методов, связанных с сеансом. Сеанс должен быть настроен и активирован перед отправкой сообщений или получением информации о состоянии соединения.
Сначала подумал, что я положил свой код для инициализации сеанса:
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
во viewDidLoad на устройстве iOS и в willActivate на стороне часов.
Это работает... но я не думаю, что это хорошее решение. Я еще не слишком знаком с жизненным циклом приложения, но, насколько я понимаю, они вызываются каждый раз, когда приложение открывается.
Это приводит к "переподключению" каждый раз, когда открывается одно из приложений?
Где было бы хорошее место для размещения этого кода?
1 ответ
Когда вы положите WCSession
код в viewDidLoad
а также willActivate
он вызывается не только при открытии приложения, но и каждый раз, когда отображается контроллер представления, содержащий код. Так что это не идеальное место.
Лучшее место, чтобы поместить этот код в application:didFinishLaunchingWithOptions
в вашем приложении AppDelegate
И в applicationDidFinishLaunching
в ваших расширениях часов ExtensionDelegate
Вы можете поместить всю обработку сессий в одноэлементный класс, как предложено в этом замечательном учебнике @NatashaTheRobot.
Таким образом, сеанс создается только один раз за время, в течение которого приложение хранится в памяти.
РЕДАКТИРОВАТЬ
Как указал ccjensen в своем комментарии, если вы используете соединение для обновления Complication, Notification или Glance, вы должны активировать сеанс в ExtensionDelegate. init
метод. applicationDidFinishLaunching
не будет вызван в этих случаях.