我观察到在IOS-8模拟器上,XCTest在应用程序获取调用“applicationDidBecomeActive”之前运行。我也通过检查applicationState来确认这一点。但是,在IOS-9中,XCTests在应用程序被激活后运行,这是这是IOS-8上的一个错误,还是我可以做一些设置来控制何时应该运行XCTest?
答案 0 :(得分:0)
你观察到的确实是iOS 8中的一个错误(在我看来是一个主要错误)。它与XCTests无关,即使你遇到了这个问题。问题是在iOS 8中启动期间事件到达的顺序。换句话说,问题是不是应用程序尚未激活,而是消息 applicationDidBecomeActive:
在iOS 8中来得太晚了。
在iOS 7及之前,事件(在应用代理和根视图控制器之间分配)按此顺序到达:
application:didFinishLaunchingWithOptions:
viewDidLoad
viewWillAppear:
applicationDidBecomeActive:
viewDidAppear:
但iOS 8带来了一个重大变化:在根视图控制器的界面出现并且根视图控制器已收到applicationDidBecomeActive:
之后,应用委托收到viewDidAppear:
,所以iOS 8中的事件开始顺序是这样的:
application:didFinishLaunchingWithOptions:
viewDidLoad
viewWillAppear:
viewDidAppear:
applicationDidBecomeActive:
对于我的许多应用来说,这是一场灾难,而且它在iOS 9(与iOS 7之前和之前的版本一样)中被颠倒的事实证实了我的观点,即它是一个错误。你只需要以某种方式解决它(或放弃让你的应用程序与iOS 8兼容)。