【问题标题】:App crashes when Back button tapped while scrolling table view滚动表格视图时点击后退按钮时应用程序崩溃
【发布时间】:2012-04-13 18:52:22
【问题描述】:

我在带有后退按钮的导航视图中展示了一个模态表视图。后退按钮向模态视图的委托发送消息以关闭模态视图。如果我滚动表格视图,然后在表格视图仍在滚动时点击导航栏上的后退按钮,应用程序将崩溃并显示以下消息:

*** -[UILayoutContainerView setUseFastMode:]: message sent to deallocated instance 0xef74650

当我 PO 0xef74650 我得到这个:

(int) $1 = 251086416 [no Objective-C description available]

以前有人经历过吗?解决方法或修复方法是什么?

【问题讨论】:

    标签: objective-c ios uitableview crash


    【解决方案1】:

    我相信这是 iOS 5.1 中的一个错误,当动画解除当前正在滚动的模态时会发生这种错误。我收到用户报告说我的应用程序崩溃了,当我进行调查时,我遇到了同样的错误。

    我用最少的代码/视图创建了一个新项目,并且能够重现此崩溃。到目前为止,我发现的唯一解决方法是在关闭模式时禁用动画。我已经向 Apple 提交了错误报告。

    【讨论】:

    • 我可以确认您的解决方法。谢谢。我不喜欢视图在没有动画过渡的情况下消失的方式,但它胜过让应用程序崩溃!当然希望Apple修复这个问题。如果您发现 Apple 已修复该错误,请在以后更新此答案。
    • 这对我有用: NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0] ; [self.tblChildProducts scrollToRowAtIndexPath:myIP atScrollPosition:UITableViewScrollPositionTop 动画:NO]; [selfdismissModalViewControllerAnimated:YES];
    【解决方案2】:

    我遇到了类似的问题,如果表格仍在滚动,我的应用程序会崩溃,并且我触发了模式视图以显示在表格上方。我的实例中的崩溃是在cellForRowAtIndexPath 中引发的,indexPath 已被释放。

    我通过在 viewWillDisappear 方法中停止滚动来修复它:-

    - (void) viewWillDisappear:(BOOL)animated {
        [self.tableView setContentOffset:self.tableView.contentOffset animated:NO];
    }
    

    希望这可能对研究相关问题的人有所帮助!

    【讨论】:

    • 这个问题在 iOS 9.2 中似乎仍然存在,感谢您的修复。
    【解决方案3】:

    iOS 5 在 UIView 上的 FastModeAdditions 类别中有一个错误。如果您有一个滚动视图的子视图,该子视图在与模式视图控制器被解除的同一运行循环中滚动,则会出现此错误。

        Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
    Exception Codes: KERN_INVALID_ADDRESS at 0xa0000008
    Crashed Thread:  0
    
    Thread 0 name:  Dispatch queue: com.apple.main-thread
    Thread 0 Crashed:
    0   libobjc.A.dylib                 0x34bdef78 objc_msgSend + 16
    1   UIKit                           0x35309f9e -[UIView(FastModeAdditions) _setContainerLayoutViewForFastMode:] + 98
    2   UIKit                           0x351701cc -[UIView dealloc] + 568
    3   UIKit                           0x3545a39e -[UIDropShadowView dealloc] + 86
    4   libobjc.A.dylib                 0x34be016e _objc_rootRelease + 30
    5   CoreFoundation                  0x32b882e0 CFRelease + 88
    

    我们发现最好的解决方法是 performSelector:afterDelay: 解雇。这会强制在以后的运行循环中解除,并且不再发生崩溃。

    这在 iOS 6 上不会发生。

    【讨论】:

      【解决方案4】:

      签入setUseFastMode: 以确保您没有发布您稍后尝试访问的内容。

      [someObject release];
      

      【讨论】:

      • setUseFastMode 方法是 Apple 未向开发人员提供的 iOS SDK 的一部分。我不知道它是什么或它做什么。它本质上是一个我无法进入的黑匣子。
      【解决方案5】:

      点击模态框内的按钮时,我正在关闭模态框,如果其表格仍在滚动,则会发生此崩溃。这是不正确的:在将关闭代码移动到呈现视图控制器并将其作为委托方法的一部分调用后,不再发生崩溃。

      【讨论】:

        【解决方案6】:

        这对我有用:

        NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0]
        [self.tblChildProducts scrollToRowAtIndexPath:myIP atScrollPosition:UITableViewScrollPositionTop animated:NO]
        [self dismissModalViewControllerAnimated:YES]
        

        @Slee 2012 年 5 月 24 日 11:18

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多