启动iPhone应用程序时,会话didReceiveApplicationContext可以在多久之前被调用

时间:2018-11-20 23:41:21

标签: ios swift watchkit watchconnectivity wcsession

在我的手机应用程序中,WCSession在AppDelegate的didFinishLaunchingWithOptions方法中被激活。手表应用程序正在向电话应用程序发送applicationContext。假设在转移时电话应用程序尚未运行,并且当电话应用程序稍后启动时,对didReceiveApplicationContext的呼叫可以在多久之前进入电话应用程序?我不担心延误或迟到。我想知道是否有可能在rootViewController的viewDidLoad方法运行之前进行调用。当应用在手机上启动时,此会话事件能否进入UIWindow创建事件与viewDidLoad上的rootViewController事件之间的某个事件循环中?

在我对真实设备上的应用程序的测试中,它总是在调用viewDidLoad之后发生,但经常在AppDelegate的applicationDidBecomeActive之前发生。

我正在使用情节提要。但是,如果在代码中创建了主视图,我有兴趣学习任何可能的差异。此外,didReceiveApplicationContext中的操作不会触摸任何视图或子视图。它只是存储数据并通知所有注册的视图控制器。

1 个答案:

答案 0 :(得分:0)

到目前为止,我还没有发现有关缓冲的applicationContext何时在启动时将被传递到手机的任何明确或隐含的保证。明确地说,我指的是按事件顺序排列的所有文档数据(例如,仅在应用程序激活后)。隐式地,我的意思是基于主运行循环以及应用程序的启动时间事件的任何逻辑推断,这可以确保在启动过程的某个阶段之前不会尝试进行交付。因此,我将在这里记下我的观察结果。

当我仅使用applicationContext来将数据传递到iPhone上未运行的应用程序时,总是在viewDidLoad上调用rootViewController方法后,以及在何时传递数据电话应用程序最终启动。但是,如果我在sendMessage之后从手表到手机执行sendApplicationContext,它将按预期唤醒手机上的应用程序。此时,即使在加载applicationContext的视图之前,缓冲的rootViewController有时似乎仍已传递到电话中。