Начиная с watchOS 2, у нас есть объект ExtensionDelegate
, который аналогичен UIApplicationDelegate
(реагирует на события жизненного цикла приложения).
Я хочу получить ссылку на первый объект контроллера интерфейса, который будет отображаться при запуске, чтобы установить для него свойство (например, передать объект хранилища данных).
Согласно docs, свойство rootInterfaceController
на WKExtension
возвращает исходный контроллер:
Контроллер корневого интерфейса расположен в основной раскадровке приложения, и с ним связан объект Main Entry Point. WatchKit отображает контроллер корневого интерфейса во время запуска, хотя приложение может представить другой контроллер интерфейса до завершения последовательности запуска.
Поэтому я пробую в ExtensionDelegate
следующее:
func applicationDidFinishLaunching() {
guard let initialController = WKExtension.sharedExtension().rootInterfaceController else {
return
}
initialController.dataStore = DataStore()
}
Несмотря на то, что отображается правильный интерфейсный контроллер, rootInterfaceController
в этот момент равен нулю. Интересно, что если я запрашиваю то же свойство в willActivate()
моего контроллера интерфейса, свойство устанавливается правильно.
В приложении для iOS вы уже можете получить контроллер корневого представления в applicationDidFinishLaunching()
, и я подумал, что он должен работать так же для watchOS.
Есть ли способ установить свойства на моем контроллере интерфейса до его отображения (извне)? Это ошибка?
Большое спасибо за ответ!
rootInterfaceController
на данном этапе равно нулю, поэтому я закончил тем, что создал экземпляры своих свойств в подклассах контроллера интерфейса. Не очень хорошо, но это лучшее, что у меня есть на данный момент. : / - person József Vesza   schedule 01.12.2015dispatch_after
в свой код, установил его на 1 секунду, и тогда свойствоrootInterfaceController
имело ожидаемое значение. Довольно неприятно. @ józsef-vesza - person Wilmar   schedule 01.12.2015applicationDidFinishLaunching
срабатывает дважды, а во втором вызовеrootInterfaceController
больше не равно нулю. Очень странный. Вы подали радар? Я был бы счастлив обмануть это. - person Jeff V   schedule 10.01.2016