【问题标题】:iOS 8 crash - objc_msgSend() selector name: respondsToSelector:iOS 8 崩溃 - objc_msgSend() 选择器名称:responsToSelector:
【发布时间】:2015-08-19 16:02:04
【问题描述】:

我有以下崩溃报告。它只发生在 iOS 8 上。我确切地知道如何重现它,但我一生都无法弄清楚我的代码中的问题所在。当我使用断点并尝试单步执行应用程序时,不会发生崩溃。如何找到我的应用中的问题所在?

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x10
Crashed Thread:  0

    Application Specific Information:
objc_msgSend() selector name: respondsToSelector:

Thread 0 Crashed:
0   libobjc.A.dylib                      0x00000001974b3bd0 objc_msgSend + 16
1   UIKit                                0x000000018ab960f4 -[UIToolbar _didMoveFromWindow:toWindow:] + 108
2   UIKit                                0x000000018aa30d44 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 700
3   UIKit                                0x000000018aa30d44 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 700
4   UIKit                                0x000000018aa30d44 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 700
5   UIKit                                0x000000018aa303dc __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 140
6   UIKit                                0x000000018aa302bc -[UIView(Hierarchy) _postMovedFromSuperview:] + 480
7   UIKit                                0x000000018aa3c0b0 -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1788
8   UIKit                                0x000000018ac1c368 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke + 1432
9   UIKit                                0x000000018aa42b6c +[UIView(Animation) performWithoutAnimation:] + 84
10  UIKit                                0x000000018ac1bb2c -[_UINavigationParallaxTransition animateTransition:] + 852
11  UIKit                                0x000000018abd7b70 -[UINavigationController _startCustomTransition:] + 3032
12  UIKit                                0x000000018aae9ef0 -[UINavigationController _startDeferredTransitionIfNeeded:] + 464
13  UIKit                                0x000000018aae9cbc -[UINavigationController __viewWillLayoutSubviews] + 52
14  UIKit                                0x000000018aae9c3c -[UILayoutContainerView layoutSubviews] + 196
15  UIKit                                0x000000018aa31760 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 576
16  QuartzCore                           0x000000018a379e1c -[CALayer layoutSublayers] + 148
17  QuartzCore                           0x000000018a374884 CA::Layer::layout_if_needed(CA::Transaction*) + 316
18  QuartzCore                           0x000000018a374728 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 28
19  QuartzCore                           0x000000018a373ebc CA::Context::commit_transaction(CA::Transaction*) + 272
20  QuartzCore                           0x000000018a373c3c CA::Transaction::commit() + 524
21  QuartzCore                           0x000000018a36d364 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 76
22  CoreFoundation                       0x0000000185fac2a4 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 28
23  CoreFoundation                       0x0000000185fa9230 __CFRunLoopDoObservers + 356
24  CoreFoundation                       0x0000000185fa9610 __CFRunLoopRun + 832
25  CoreFoundation                       0x0000000185ed52d4 CFRunLoopRunSpecific + 392
26  GraphicsServices                     0x000000018f59b6fc GSEventRunModal + 164
27  UIKit                                0x000000018aa9afac UIApplicationMain + 1484
28  MyAppName                            0x00000001001b8ae0 main (main.m:16)
29  libdyld.dylib                        0x0000000197b1ea08 start + 0

【问题讨论】:

    标签: ios8 objc-message-send


    【解决方案1】:

    我知道如何复制它

    仅此一项就值金。

    这是一个内存管理问题。您将需要在打开僵尸的情况下复制崩溃的条件。一些物体从它的指针下消失了,僵尸会告诉你它是什么物体。

    请记住,崩溃的那一刻可能与问题的原因无关。崩溃的时刻只是诊断性的。消失的物体,很可能早就消失了;然而,直到现在,有人试图向它发送消息,却发现它不再在家。

    (例如,一个接受delegate 并且其委托已被销毁的 Cocoa 类会导致此类问题。委托未保留,因此 Cocoa 类不知道发生了任何事情。解决方案是那么您需要在该委托不存在之前将delegate 设置为nil。我并不是说这是具体问题;我只是举例说明这种事情是如何发生的。)

    【讨论】:

    • 感谢您抽出宝贵时间撰写如此详尽的回复。我一直在寻找僵尸。现在我必须弄清楚为什么我的主 VC 在告诉导航控制器推送另一个 VC 时会变成僵尸。
    • “现在我必须弄清楚为什么当我的主 VC 告诉导航控制器推动另一个 VC 时,它会变成僵尸” 不过,你的话再一次是金句。您可以如此准确地指出哪里出了问题,这一事实肯定意味着您已经完成了解决方案的十分之九。 - 如果您可以绘制视图控制器的结构并显示您在推送到导航控制器堆栈时正在做什么,也许您可​​以提出一个新问题(如果您自己没有弄清楚的话)。跨度>
    • 调用栈中提到fromWindow:toWindow:有点担心;你不应该有多个窗口(但也许你实际上没有)......
    • 我在任何时候都没有明确地创建另一个窗口。此外,僵尸正在我的工具栏上被调用,但我没有将该 VC 设置为工具栏的代表。
    • 是的,也许窗口的东西只是一些内部技巧。这就是为什么我说“也许你没有”。 - 也许尝试一个消除过程?如果崩溃是可重现的,也许只需删除工具栏并重试。如果这样解决了它,工具栏就会以某种方式受到牵连。 :)
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多