当我点击弹出视图控制器的按钮时,我的应用程序(名为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
我怀疑它与notificationCenter和我使用的UIDeviceOrientationDidChangeNotifications
有关。这是真的还是我看错了方向?
我在打电话
[notificationCenter removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]
在viewDidUnload
中,这足够了吗?
你能告诉我我应该开始寻找什么错误吗?
答案 0 :(得分:1)
这是一个堆栈跟踪,您可以看到崩溃发生时调用的方法堆栈。
从底部开始,自己动手到顶部并从应用程序中搜索方法调用(stacktrace也包括来自框架的调用(例如-[UIScrollView(Static) _adjustContentOffsetIfNecessary]
))。
来自您的应用程序的最顶层方法调用可能是您的错误的原因,您可以看到系统之后尝试了什么。
在您的情况下,似乎您调用popToViewController
并且iOS框架尝试设置从一个UIViewController
到下一个Exception Type: EXC_BAD_ACCESS (SIGSEGV)
的转换动画。表视图似乎存在设置其框架并滚动到contentOffset的问题。
这可能是由内存错误引起的。您可以通过检查{{1}}来获得此提示 EXC_BAD_ACCESS可能暗示您尝试访问内存中不再存在的内容 - >已经发布了。
一般情况下,我会建议在Xcode中激活exveption断点: 您是否设置了异常断点?
现在,如果发生异常,您应该会看到堆栈跟踪。并且Xcode应该在崩溃发生的那一行。
你应该熟悉的第二件事是仪器中的僵尸模式 你可以在这个video中找到对zombi模式的一个很好的介绍。
答案 1 :(得分:0)
在您的情况下,您可以看到自己有EXC_BAD_ACCESS (SIGSEGV)
。这意味着你正试图访问不在这里的东西,或者至少在这里,但现在已经不存在了。如果您可以复制错误,请尝试使用Instruments的Zombies模式,它会告诉您希望访问哪些内容。解决此问题的方法通常是您过早地将资源释放到您仍需要的资源中。
答案 2 :(得分:0)
您可能希望在方法中抛出一些NSLog语句,以便您可以了解出现问题的地方。有时那些iOS消息可能有点神秘。