【问题标题】:UIScrollView internal consistency crashUIScrollView 内部一致性崩溃
【发布时间】:2014-09-29 15:43:34
【问题描述】:

我的 UITableView 有 UICollectionViews 的间歇性崩溃问题。

我有一个导航控制器,它的根视图控制器有:

  1. 具有 3 个部分的 UITableView
  2. 每个部分都有一行
  3. 每一行都有一个 UICollectionView
  4. UITableView(集合视图)的顶行是根据 NSTimer 自动滚动的。

当我推入导航控制器并来回弹出时发生崩溃。当我推送和弹出 3-4 次时会发生这种情况

痕迹:

Thread 0 Crashed:
0   libobjc.A.dylib                 0x38f74626 objc_msgSend + 6
1   UIKit                           0x312a6740 -[UIScrollView(UIScrollViewInternal) _notifyDidScroll] + 60
2   UIKit                           0x31020798 -[UIScrollView setContentOffset:] + 600
3   UIKit                           0x312a76b6 -[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary] + 1394
4   UIKit                           0x310d33d2 -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:tramplingDragFlags:] + 414
5   UIKit                           0x310d322a -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:] + 26
6   UIKit                           0x310d31e2 -[UIScrollView removeFromSuperview] + 26
7   UIKit                           0x31001952 -[UIView dealloc] + 374
8   CoreFoundation                  0x2e700140 CFRelease + 556
9   CoreFoundation                  0x2e70b668 -[__NSArrayM dealloc] + 156
10  libobjc.A.dylib                 0x38f79b66 objc_object::sidetable_release(bool) + 170
11  libobjc.A.dylib                 0x38f7a0ce (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 354
12  CoreFoundation                  0x2e70347c _CFAutoreleasePoolPop + 12
13  CoreFoundation                  0x2e798f0e __CFRunLoopRun + 1310
14  CoreFoundation                  0x2e703724 CFRunLoopRunSpecific + 520
15  CoreFoundation                  0x2e703506 CFRunLoopRunInMode + 102
16  GraphicsServices                0x336726ce GSEventRunModal + 134
17  UIKit                           0x3106486c UIApplicationMain + 1132
18  BoatSenzeDev                    0x00110648 main (main.m:16)
19  libdyld.dylib                   0x39468ab4 start + 0

【问题讨论】:

    标签: ios objective-c iphone uitableview uiscrollview


    【解决方案1】:

    我认为在处理过渡动画时,iOS 8 上的某个地方存在一个错误,即UITableViewController(或包含UITableView 的普通UIViewControllerdealloc 的时间安排。不知何故,视图控制器已被释放,但表视图仍在尝试向其委托发送消息。

    作为一种解决方法,您可以像这样在UITableViewController 上实现dealloc 方法:

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

    【讨论】:

    • 这个错误不仅仅发生在 iOS8 中。我从 iOS8.1.3 和 iOS7.1.2、iPad 2 和 iPad Mini 收到 Crashlytics 报告。但确实是 90% 的 iOS8。因为异常不会在我的设备和模拟器上引发,所以我需要等待另一个 App Store 版本来验证这确实修复了错误。
    • @RobvanderVeer 为什么不使用仪器分析您的应用程序并检查僵尸?或者您可以在断开连接的 iPhone 上运行该应用程序 - 使您的应用程序崩溃,然后重新连接,从 Xcode 打开设备,您应该能够看到崩溃日志。
    • 感谢@IslamQ,我设法通过在滚动视图上大量滚动来重现崩溃,然后快速切换视图。我的最后一次更新包括对所有 tableView 视图控制器的 dealloc 修复,所有相关的崩溃都消失了,包括 iOS7、8、8.1 和 8.2beta
    • 通过 Crashlytics(iOS7 和 iOS8)获取相同的报告,但我自己并没有遇到崩溃。我实现了这个 dealloc 方法,希望它能修复它。
    • 我在最新的 iPod 上安装了它们,但在任何 iPhone 上都没有。
    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2014-11-22
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多