在tableView底部按"后退"时导航控制器崩溃.如果我稍微向上滚动程序不会崩溃

A_t*_*ter 2 uitableview ios swift

我有两个页面,每个页面都有一个tableView.当通过push segue按下单元格时,第一个tableview导致第二个tableView.我使用"嵌入"将导航控制器应用到第一个视图控制器,它给第二个视图一个后退按钮,该按钮适用于99%的应用程序.出于某种原因,如果我一直向下滚动到第二个tableview的底部,然后按下后退按钮,应用程序崩溃时会出现以下错误:Thread 1: EXC_BAD_ACCESS.控制台的回溯是这样的:

(lldb) bt
* thread #1: tid = 0x9517c, 0x000000011115a00b libobjc.A.dylib`objc_msgSend + 11, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
    frame #0: 0x000000011115a00b libobjc.A.dylib`objc_msgSend + 11
    frame #1: 0x000000010ff1f462 UIKit`-[UIScrollView(UIScrollViewInternal) _notifyDidScroll] + 56
    frame #2: 0x000000010ff0fa42 UIKit`-[UIScrollView setContentOffset:] + 645
    frame #3: 0x000000010ff79b5f UIKit`-[UITableView setContentOffset:] + 362
    frame #4: 0x000000010ff24360 UIKit`-[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary] + 1445
    frame #5: 0x000000010ff214ef UIKit`-[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:tramplingDragFlags:] + 417
    frame #6: 0x000000010ff102d6 UIKit`-[UIScrollView removeFromSuperview] + 32
    frame #7: 0x000000010fee9e39 UIKit`-[UIView dealloc] + 404
    frame #8: 0x00000001111588cd libobjc.A.dylib`(anonymous namespace)::AutoreleasePoolPage::pop(void*) + 591
    frame #9: 0x000000010f045da6 CoreFoundation`_CFAutoreleasePoolPop + 22
    frame #10: 0x000000010f079ef3 CoreFoundation`__CFRunLoopRun + 2051
    frame #11: 0x000000010f079486 CoreFoundation`CFRunLoopRunSpecific + 470
    frame #12: 0x0000000113e329f0 GraphicsServices`GSEventRunModal + 161
    frame #13: 0x000000010fe8b420 UIKit`UIApplicationMain + 1282
  * frame #14: 0x000000010eb9122e appname`top_level_code + 78 at AppDelegate.swift:13
    frame #15: 0x000000010eb9126a appname`main + 42 at AppDelegate.swift:0
    frame #16: 0x000000011191d145 libdyld.dylib`start + 1
(lldb) 
Run Code Online (Sandbox Code Playgroud)

如果我从第二个tableView的底部稍微向上滚动,程序不会崩溃.我添加导航控制器的方法是单击第一个视图控制器并使用"嵌入"命令.崩溃发生时,它会将我带到AppDelegate文件,如下所示: 在此输入图像描述

什么可能导致该程序以这种特定方式崩溃?

Ben*_*n-G 6

错误消息告诉我们UIScrollView(它是TableView的一部分)正在尝试向其委托发送消息,该委托似乎在该时间点被释放.

UITableView当你按下后退按钮时似乎没有被释放,但是UIViewController.

这里提出了一个非常类似的问题:iOS SDK中的UIScrollView EXC_BAD_ACCESS崩溃

第一步追查这个问题将要实施dealloc您的方法UIViewController子类,设置delegateUITableView零.

您还应该打开Zombies(在ios6上使用Xcode 5跟踪僵尸)以获取有关哪个解除分配的实例正在接收此消息的更多信息.

  • 谢谢你的回复!我最终在`viewWillDisappear`中设置了'self.tableView.delegate = nil`,现在它没有崩溃! (2认同)