我观察到,在IOS-8模拟器上,XCTest在应用程序获得“applicationDidBecomeActive”调用之前运行。我还通过检查applicationState来确认这一点。然而,在IOS-9中,在app被激活后运行XCTests是想要的行为。这是IOS-8上的一个错误,还是有什么设置可以控制XCTest何时运行?
发布于 2016-01-21 19:23:12
您所观察到的确实是iOS 8中的一个bug (我认为是一个主要的bug ),它与XCTests无关,尽管这就是您遇到这个问题的原因。问题在于iOS 8发布期间事件的顺序。换句话说,问题不是应用程序没有被激活,而是消息applicationDidBecomeActive:在iOS 8中到达太晚了。
在iOS 7和之前,事件(分布在应用程序委托和根视图控制器之间)按以下顺序到达:
application:didFinishLaunchingWithOptions:viewDidLoadviewWillAppear:applicationDidBecomeActive:viewDidAppear:但是,iOS 8带来了一个重大变化:在根视图控制器的接口出现之后,应用程序委托接收applicationDidBecomeActive:,而根视图控制器接收了viewDidAppear:,因此iOS 8中的事件开始顺序如下所示:
application:didFinishLaunchingWithOptions:viewDidLoadviewWillAppear:viewDidAppear:applicationDidBecomeActive:这对我的许多应用程序来说都是一场灾难,而在iOS 9中(它的工作方式类似于iOS 7及之前)的事实证实了我的观点:它是一个bug。你只需设法解决这个问题(或者放弃让你的应用程序与iOS 8兼容)。
https://stackoverflow.com/questions/34931839
复制相似问题