ios - 应用程序在 iOS 9 + Xcode 7 的 Segue 上崩溃整个设备

标签 ios xcode storyboard

更新:我在这一年中使用了我的一个 DTS。目前与 Apple 支持工程师合作。根据他的建议,我还为此创建了一个错误报告。随着时间的推移,我将更新此线程,希望能产生最终解决方案。

不知何故,我想出了一种方法来创建一个真正重启模拟器和/或物理设备的应用程序。为我欢呼。当我升级到 xcode 7 并开始针对 iOS 9 进行测试时,这个问题就开始了。在任何低于 iOS 9 的设备/模拟器上,这个问题都不会出现。

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

XPC connection interrupted
Terminating since there is no system app.

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

[self addChildViewController:segue.destinationViewController];

此代码是以此 view controller 的样式创建的“MultichildContainerViewController”的一部分

在这一点上,我只是不知道去哪里寻找/做什么来解决这个问题。如果我注释掉 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 上,这不应该只会让我的应用程序崩溃吗?不是整个模拟器?

最佳答案

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

我试图隔离问题,所以我将 Storyboard复制到一个空白项目中并删除所有连接并将所有类设置为默认类(无自定义类)。

经过一番尝试,我决定尝试将不同的 Split View Controller 重新链接到相同的主类和细节类。有用!所以我比较了所有设置,几乎没有什么不同。该死的。

现在怎么办?打开源代码。右键单击左 Pane 中的 Storyboard,然后选择“使用外部编辑器打开”。这应该打开 Storyboard的源代码。我对比了两个split view controller的源码,发现了区别。

这是我看的地方

<!--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>

我不知道它是什么,也不知道它是如何到达那里的,但是当我删除这 3 行时,崩溃就消失了。有一个 UIKeyCommand类,但我从未使用过它,所以我不确定它是否相关。希望这对您有所帮助!

关于ios - 应用程序在 iOS 9 + Xcode 7 的 Segue 上崩溃整个设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180655/

相关文章:

ios - View 与 Storyboard 不匹配

ios - 找不到目录 Apple Mach-O 链接器警告但库搜索路径和框架搜索路径为空

IOS WKWebView 文件上传不工作

objective-c - 在 Objective C 中自动插入标题文档注释?

objective-c - 存档中的 Swift 编译器错误

xcode Storyboard不接受更改

ios - 线程完成时的 Objective C 设置图像

ios - 调整大小时如何禁用子层的缩放?

swift - 无法获得自动布局以使两个按钮并排留在那里

ios - 将多个 Storyboard与 TabBarController 一起使用