如何从Crittercism

时间:2015-09-16 03:46:53

标签: ios objective-c iphone sigsegv

以下是我从Crittercism收到的崩溃报告,其中崩溃名称为SIGSEGV,原因是SEGV_MAPERR。

0   libobjc.A.dylib 0x0000000196363bd0 objc_msgSend + 12
1   UIKit 0x00000001893df9bc -[UIScrollView(UIScrollViewInternal) _notifyDidScroll] + 68
2   UIKit 0x000000018911cb9c -[UIScrollView setContentOffset:] + 496
3   UIKit 0x00000001891d2880 -[UITableView setContentOffset:] + 296
4   UIKit 0x00000001893e0634 -[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary] + 860
5   UIKit 0x00000001891d8b64 -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:tramplingDragFlags:] + 396
6   UIKit 0x00000001891d898c -[UIScrollView removeFromSuperview] + 40
7   UIKit 0x00000001890fda08 -[UIView dealloc] + 436
8   libobjc.A.dylib 0x0000000196369724 (anonymous namespace)::AutoreleasePoolPage::pop() + 560
9   CoreFoundation 0x0000000184564d14 _CFAutoreleasePoolPop + 24
10 CoreFoundation 0x00000001846395f4 __CFRunLoopRun + 1496
11 CoreFoundation 0x0000000184564f74 CFRunLoopRunSpecific + 392
12 GraphicsServices 0x000000018dfbf6fc GSEventRunModal + 164
13 UIKit 0x0000000189166d94 UIApplicationMain + 1484
14 MyApplication 0x000000010004bd80 main (main.m:7) 
15 libdyld.dylib 0x00000001969faa08 start + 0

虽然输出已经被象征化,但仍然很难弄清楚问题的实际存在和位置。

最初我以为我继续调用tableView的委托或数据源,即使它们已经消失了,所以无论何时使用tableview的委托,我都会向所有视图控制器添加以下内容。但是,这并没有解决崩溃问题。

- (void) dealloc {
    if (self.tableView) {
        self.tableView.delegate = nil;
        self.tableView.dataSource = nil;
    }
}

我也尝试在XCode中启用“启用僵尸对象”选项,但目前我无法在本地重现此选项。

这次崩溃主要发生在iPhone 5s / 6(每个约45%)上,iOS版本从8.0到最新的8.4.1。该应用程序正在使用ARC。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我有同样的错误。 您需要清除NavigationController的委托。 因为在iOS 8到iOS 8.3中UINavigationController的委托是retain而不是weak https://developer.apple.com/library/content/releasenotes/General/iOS90APIDiffs/Objective-C/UIKit.html enter image description here

此外,在dealloc中清除该代理也无济于事。委托方法将在dealloc之前调用。然后崩溃了。

将它放在viewDidDisappear中。