1

当我单击弹出视图控制器的按钮时,我的应用程序(名为 MyLittleApplication)随机崩溃。我可以在崩溃日志中使用一些帮助(找出我应该从哪里开始寻找):

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x600332e0
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x351faf78 objc_msgSend + 16
1   Foundation                      0x37d0a74c NSKVOPendingNotificationCreate + 216
2   Foundation                      0x37d0a652 NSKeyValuePushPendingNotificationPerThread + 62
3   Foundation                      0x37cfc744 NSKeyValueWillChange + 408
4   Foundation                      0x37cd3848-[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 176
5   Foundation                      0x37d55a14 _NSSetPointValueAndNotify + 76
6   UIKit                           0x311f825a -[UIScrollView(Static) _adjustContentOffsetIfNecessary] + 1890
7   UIKit                           0x31215a54 -[UIScrollView setFrame:] + 548
8   UIKit                           0x31215802 -[UITableView setFrame:] + 182
9   POViO                           0x000fcac8 0xf8000 + 19144
10  UIKit                           0x31211b8e -[UIViewController _setViewAppearState:isAnimating:] + 138
11  UIKit                           0x3126b8a8 -[UIViewController beginAppearanceTransition:animated:] + 184
12  UIKit                           0x3121490c -[UINavigationController _startTransition:fromViewController:toViewController:] + 832
13  UIKit                           0x312144fc -[UINavigationController _startDeferredTransitionIfNeeded] + 244
14  UIKit                           0x3125e8e4 _popViewControllerNormal + 184
15  UIKit                           0x3125e712 -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 386
16  UIKit                           0x31242bba -[UINavigationController popToViewController:transition:] + 626
17  POViO                           0x001074e6 0xf8000 + 62694
18  CoreFoundation                  0x374553f6 -[NSObject performSelector:withObject:withObject:] + 46
19  UIKit                           0x311eae00 -[UIApplication sendAction:to:from:forEvent:] + 56
20  UIKit                           0x311eadbc -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 24
21  UIKit                           0x311ead9a -[UIControl sendAction:to:forEvent:] + 38
22  UIKit                           0x311eab0a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 486
23  UIKit                           0x311eb442 -[UIControl touchesEnded:withEvent:] + 470
24  UIKit                           0x311e9924 -[UIWindow _sendTouchesForEvent:] + 312
25  UIKit                           0x311e9312 -[UIWindow sendEvent:] + 374
26  UIKit                           0x311cf68e -[UIApplication sendEvent:] + 350
27  UIKit                           0x311cef34 _UIApplicationHandleEvent + 5820
28  GraphicsServices                0x33c11224 PurpleEventCallback + 876
29  CoreFoundation                  0x374cf51c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
30  CoreFoundation                  0x374cf4be __CFRunLoopDoSource1 + 134
31  CoreFoundation                  0x374ce30c __CFRunLoopRun + 1364
32  CoreFoundation                  0x3745149e CFRunLoopRunSpecific + 294
33  CoreFoundation                  0x37451366 CFRunLoopRunInMode + 98
34  GraphicsServices                0x33c10432 GSEventRunModal + 130
35  UIKit                           0x311fdcce UIApplicationMain + 1074
36  MyLittleApplication                 0x000f90ae 0xf8000 + 4270
37  MyLittleApplication                 0x000f9048 0xf8000 + 4168

我怀疑它与UIDeviceOrientationDidChangeNotifications我使用的 notificationCenter 有关。这是真的还是我看错了方向?
我打电话

[notificationCenter removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil] 

viewDidUnload,这应该足够了吗?

你能告诉我应该开始寻找什么错误吗?

4

3 回答 3

1

这是一个堆栈跟踪,您可以看到崩溃发生时调用的方法堆栈。您从底部开始,一直到顶部并从您的应用程序中搜索方法调用(堆栈跟踪也包括来自框架的调用(例如-[UIScrollView(Static) _adjustContentOffsetIfNecessary]))。
来自您的应用程序的最顶层方法调用可能是您的错误的原因,您可以看到系统随后尝试了什么。

在您的情况下,您似乎调用popToViewController并且 iOS 框架尝试为从一个UIViewController到下一个的过渡设置动画。表格视图设置其框架并滚动到 contentOffset 似乎存在问题。

这很可能是由内存错误引起的。Exception Type: EXC_BAD_ACCESS (SIGSEGV)
你通过检查EXC_BAD_ACCESS 得到这个提示很可能是一个提示,你试图访问一个不在内存中的东西 -> 已经释放。

一般来说,我建议在 Xcode 中激活 exveption 断点:你设置了异常断点吗?

  • 到断点编辑器窗格
  • 点击左下角的 x
  • 选择添加异常断点

现在,如果发生异常,您应该会看到堆栈跟踪。Xcode 应该在崩溃发生的那一行。

您应该熟悉的第二件事是 Instruments 中的僵尸模式。你可以在这个视频
中找到僵尸模式的一个很好的介绍。

于 2012-08-24T09:37:07.267 回答
0

在你的情况下,你可以看到你有一个EXC_BAD_ACCESS (SIGSEGV). 这意味着您正在尝试访问不在这里的东西,或者至少在这里但不再存在的东西。如果您可以复制错误,请尝试使用 Instruments 的 Zombies 模式,它会告诉您它期望访问的内容。这个问题的解决方案通常是你过早地释放了你仍然需要的资源。

于 2012-08-24T09:40:24.380 回答
0

你可能想在方法中抛出一些 NSLog 语句,这样你就可以知道哪里出了问题。有时这些 iOS 消息可能有点神秘。

于 2012-08-24T20:18:40.003 回答