【问题标题】:Collection View Batch Update Crash集合视图批量更新崩溃
【发布时间】:2014-06-04 18:10:38
【问题描述】:

我间歇性地收到带有以下错误的Crashlytics 报告:

Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x0000000e
 raw

libobjc.A.dylib 
objc_msgSend + 5
1
UIKit   
-[UICollectionViewUpdate _computeItemUpdates] + 1588
2
UIKit   
-[UICollectionViewUpdate initWithCollectionView:updateItems:oldModel:newModel:oldVisibleBounds:newVisibleBounds:] + 254
3
UIKit   
-[UICollectionView _endItemAnimations] + 6904
4
UIKit   
-[UICollectionView performBatchUpdates:completion:] + 386

我该如何调试呢?崩溃似乎是UICollectionView 内部的。这是否意味着崩溃是 Apple SDK 内部的?

【问题讨论】:

  • 看看传递给 performBatchUpdates 的块可能会很有趣
  • 我注意到在尝试将两个项目添加和移动到同一个位置时出现崩溃。这里似乎发生了实际的内存损坏。如果这里不崩溃,稍后会崩溃。

标签: ios objective-c


【解决方案1】:

您可以使用-[UICollectionViewUpdate _computeItemUpdates] 作为值添加符号断点。每当调用该方法时,您将能够导航堆栈跟踪并(希望)查看您的代码的哪一行是崩溃前最后被调用的。

这种方法的缺点是您可能会遇到很多停顿,而崩溃之后不会发生,但它会让您了解它的来源。一旦您在代码中找到崩溃的根源,取消设置断点并更改值或设置与单元格相关的内容,直到您可以导致崩溃发生。

这通常是我从 Flurry 的崩溃报告中跟踪崩溃的方法。半年前你就问过这个问题,如果你找到了追踪这些类型错误的解决方案,如果你分享我将不胜感激:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2021-12-13
    相关资源
    最近更新 更多