2015-10-16 91 views
7

更新:我在这一年使用了我的一个DTS。目前正在与Apple支持工程师合作。根据他的建议,我也为此创建了一个错误报告。随着时间的推移,我会更新这个线程,希望能够产生一个最终的解决方案。应用程序在Segue for iOS 9 + Xcode 7上崩溃整个设备

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

当我运行它连接到Xcode中,唯一的日志消息我看到的是

XPC connection interrupted 
Terminating since there is no system app. 

我已经把范围缩小到被调用

[self addChildViewController:segue.destinationViewController]; 

的一段代码,这段代码是在这种风格创建的“MultichildContainerViewController”的一部分view controller

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

有关何处可以找到其他调试信息或可能修复的任何想法?我只是不知道该在哪里寻找更多的信息来反过来寻求帮助。任何帮助表示赞赏,谢谢。

编辑: 我不知道这是否有帮助,但我能够在实际的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 的简单情况,是不是应该只会崩溃我的应用?不是整个模拟器?

+0

我得到相同的错误!有人发布了苹果的支持线程https://forums.developer.apple.com/thread/22087。每当我尝试呈现popover或类似动画时,都会发生这种情况。仍然试图隔离这种情况 –

+0

很抱歉听到@HaydenHolligan。我已更新问题以显示我正在采取的解决此问题的步骤。希望如果/当我的问题解决了,我们可以解决你和其他人。如果你认为它的重要性,那么顺便问一下这个问题。将有助于获得它的知名度。 – Ceryni

回答

5

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

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

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

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

这是我看着

<!--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类,但我从来没有使用它,所以我不知道它是否相关。希望这可以帮助!

+1

为您的互联网点先生!干得好,干得好。我自己解析了这些差异,但还没有找到它们。我会用这个更新苹果,可怕的是,这可能会导致设备崩溃。我没有完全相同的视图控制器,但我有相同的keyCommands XML块。删除,解决了我的问题。 – Ceryni

+0

你是先生,有我的荣誉。我一直在嘲弄我的头发,处理这些故事板以及IOS9上的segue问题,对我的灵魂造成不可弥补的伤害。每当我取代那个segue时,另一个会奇迹般地消失,并且试图删除一个UIBarButtonItem并且以编程方式执行它的事情让我感到悲伤。他们可以在iOS7,iOS8,而不是iOS9下工作,不会崩溃应用程序,但整个friggin iPhone/iPad等等!吉兹。这导致我拧螺丝故事板,并只编程我想要的。 –

+2

键控命令的用户界面位于视图控制器的“属性”检查器的底部。可能的原因是意外按下了+按钮,并没有意识到应该填写额外的字段。此外,空键命令的崩溃在iOS 9中似乎是新行为。radar:// 23193389正在跟踪根本问题,无论是在构建时未报告空键命令还是UI配置的改进命令。 –

0

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

您试图在空对象上调用isEqualToString。

检查此对象是否是您期望的对象,然后再调用isEqualToString对象。

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

+0

所以我同意这是字面错误信息报告的内容,但是如果没有任何堆栈跟踪链接到我的代码,如何找到发生这种情况的位置?它们都来自CoreFoundation或backboardd。我有很多异常/错误断点,我的项目看起来像是蓝色的水痘。 – Ceryni

+0

我会首先在代码中搜索isEqualToString,并查看您调用它的对象是否为null。你说得对,整个模拟不应该崩溃。所以可能会有其他一些潜在的问题。这只是你的项目吗?如果您尝试运行不同的项目,该模拟程序是否仍会崩溃?你是否已经无意中更改了任何文件,它们是iOS 9模拟器的一部分,就像它们存储的位置一样?你的构建设置呢?你有没有尝试重置模拟器上的内容和设置,做了一个干净清晰的派生数据? –

+0

“我会从代码中搜索isEqualToString” - 我在'isEqualToString'上放了一个断点,没有任何函数调用正在对NSNull进行 “它只是你的项目吗?你试图运行一个不同的项目?“ - 就我的项目而言,模拟器对其他项目运行良好。我的项目也在8.4模拟器上运行得很好 “你是否已经无意中更改了任何文件,它们是iOS 9模拟器的一部分,就像它们存储的位置一样。” - 我担心我可能做了一些奇怪的事情, 9.0模拟器,并添加了一个全新的。相同的结果。 – Ceryni

-1

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

如果你不能确定哪里是在你的代码崩溃,你可以让你清楚知道哪里崩溃是设置异常断点。你可以通过转到你的Breakpoint Navigator来做到这一点。在左下方,有一个+按钮,为您添加例外断点:

enter image description here

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

+0

感谢您的建议,但添加此断点不会发现此错误。模拟器仍然重新启动/崩溃。 – Ceryni

相关问题