应用程序崩溃整个设备上争取iOS 9 + Xcode 7

更新:我在这一年使用了我的一个DTS。 目前正在与苹果支持工程师合作。 在他的build议,我也为此创build了一个错误报告。 随着时间的推移,我会更新这个线程,希望得到一个最终的解决scheme。

不知何故,我已经想出了一种方法来创build一个真正重新启动模拟器和/或物理设备的应用程序。 为我而欢呼。 当我升级到xcode 7并开始testingiOS 9时,这个问题就开始了。在任何一个设备/模拟器<iOS 9上,这个问题并没有让它变得丑陋。

当我运行它附加到Xcode,我看到的唯一的日志消息是

XPC connection interrupted Terminating since there is no system app. 

我已经缩小到一段正在调用的代码

 [self addChildViewController:segue.destinationViewController]; 

此代码是以此视图控制器的样式创build的“MultichildContainerViewController”的一部分

在这一点上,我只是不知道去哪里寻找/解决这个问题。 如果我注释掉了childviewcontroller的添加,一切都很好,应用程序正常运行。 如果我不注释它,它会重新启动我的整个模拟器。

任何想法在哪里可以find额外的debugging信息或潜在的修复? 我只是不知道从哪里看这个点来寻找更多的信息来轮stream使用来寻求帮助。 任何帮助表示赞赏,谢谢。

编辑:我不知道这是否有帮助,但我能够在实际的iOS模拟器system.log中狩猎。 似乎没有任何提及我自己的代码库,只是背板?

 Oct 16 17:56:29 MyComputer backboardd[43977]: -[NSNull isEqualToString:]: unrecognized selector sent to instance 0x10de1baf0 Oct 16 17:56:29 MyComputer backboardd[43977]: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x10d e1baf0' *** First throw call stack: ( 0 CoreFoundation 0x000000010dbf6f65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010df82deb objc_exception_throw + 48 2 CoreFoundation 0x000000010dbff58d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 3 CoreFoundation 0x000000010db4cf7a ___forwarding___ + 970 4 CoreFoundation 0x000000010db4cb28 _CF_forwarding_prep_0 + 120 5 BackBoardServices 0x000000010d020b28 -[BKSHIDEventKeyCommandDescriptor isEqual:] + 155 6 CoreFoundation 0x000000010db1630b -[__NSSetM addObject:] + 411 7 CoreFoundation 0x000000010db466a0 -[NSMutableSet unionSet:] + 736 8 BackBoardServices 0x000000010d0223a3 -[BKSHIDEventRouter addHIDEventDescriptors:] + 38 9 backboardd 0x000000010c73a881 backboardd + 186497 10 libdispatch.dylib 0x000000010e862df5 _dispatch_call_block_and_release + 12 11 libdispatch.dylib 0x000000010e87e4a7 _dispatch_client_callout + 8 12 libdispatch.dylib 0x000000010e868184 _dispatch_queue_drain + 1048 13 libdispatch.dylib 0x000000010e867b3c _dispatch_queue_invoke + 595 14 libdispatch.dylib 0x000000010e869454 _dispatch_root_queue_drain + 565 15 libdispatch.dylib 0x000000010e869218 _dispatch_worker_thread3 + 98 16 libsystem_pthread.dylib 0x000000010ebaa4f2 _pthread_wqthread + 1129 17 libsystem_pthread.dylib 0x000000010eba8375 start_wqthread + 13 ) 

编辑:我也想强调,这不是简单地导致应用程序崩溃,这是导致整个模拟器重新启动。 我也可以在物理设备上触发此重新启动。 如果这只是一个NSNull上调用isEqualToString的简单情况,不应该只是崩溃我的应用程序? 不是整个模拟器?

我想我知道了! 我很确定我的问题和你一样。 相同的崩溃日志和情况。

我试图隔离问题,所以我复制了我的故事板到一个空白的项目,并删除所有连接,并使所有类的默认(没有自定义类)。

在玩过一段时间后,我决定尝试将不同的分割视图控制器重新链接到相同的主类和细节类。 有用! 所以我比较了所有的设置和字面上没有什么不同。 该死的。

现在怎么办? 打开源代码。 右键单击左侧窗格中的故事板,然后select“使用外部编辑器打开”。 这应该打开故事板的源代码。 我比较了两个分割视图控制器的源代码,发现有所不同。

这是我看的地方

 <!--Split View Controller--> <scene sceneID="X6N-vM-fHn"> <objects> <splitViewController id="xSd-V6-k6W" customClass="SplitViewController" sceneMemberID="viewController"> <navigationItem key="navigationItem" id="yvV-sB-yKa"/> <keyCommands> <keyCommand/> </keyCommands> <connections> <segue destination="PW6-z0-erU" kind="relationship" relationship="masterViewController" id="MBC-0A-hls"/> <segue destination="xqk-PP-nzR" kind="relationship" relationship="detailViewController" id="sMq-cw-27p"/> </connections> </splitViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="nG8-BB-Qmu" userLabel="First Responder" sceneMemberID="firstResponder"/> </objects> <point key="canvasLocation" x="-157" y="-370"/> </scene> 

有什么不同?

 <keyCommands> <keyCommand/> </keyCommands> 

我不知道它是什么,或者它是如何到达那里的,但是当我移除这三条线时,崩溃就消失了。 有一个UIKeyCommand类,但我从来没有使用过,所以我不知道它是否相关。 希望这可以帮助!

日志告诉你到底什么是错的。

您正尝试在空对象上调用isEqualToString。

在调用isEqualToString之前检查这个对象是否是你期望的对象。

但是,因为它曾经工作的以前的操作系统版本,只是检查空值可能无法解决您的问题。 你可能需要弄清楚为什么这个项目现在是空的地方,以前不是。

正如其他人所说,你正在崩溃[NSNull isEqualToString:]

如果您不确定代码中的位置,可以设置exception断点,以便确切知道崩溃的位置。 你可以通过转到你的Breakpoint Navigator来做到这一点。 在左下angular,有一个+button可以添加exception断点:

在这里输入图像说明

一旦你设置了断点,再次运行你的应用程序,它应该在崩溃的位置设置一个断点。 祝你好运!