单元格不应处于更新动画中(UICollectionView 崩溃)

Cell should never be in update animation (UICollectionView crash)

提问人:Mikhail Maslo 提问时间:10/14/2020 最后编辑:Mikhail Maslo 更新时间:6/21/2022 访问量:2624

问:

我有 Cell 永远不应该在 crashlytics 报告的 UICollectionView 中的更新动画崩溃 此崩溃仅发生在 iOS 14 上的用户。当应用程序使用 SDK iOS 13 时,这并不明显(它影响了不到 0.01% 的所有用户)。但在支持 SDK iOS 14 后,崩溃频率明显增加到所有用户的近 0.25%。 在内部,据我所知(来自一些 UIKit 反汇编过程),UICollectionView 遍历可见单元格并检查单元格动画计数器是否等于零(否则,它会崩溃并显示以下堆栈跟踪)。这不确定,但大概崩溃发生在 performBatchUpdates(_:completion:) 我无法重现这个错误,而且我不能花更多时间深入研究 UIKitCore 反汇编代码来了解这个动画计数器何时以及为什么会发生变化。

Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x1915e9114 __exceptionPreprocess
1  libobjc.A.dylib                0x1a4e0fcb4 objc_exception_throw
2  CoreFoundation                 0x1914f8308 -[CFPrefsSearchListSource addManagedSourceForIdentifier:user:]
3  Foundation                     0x1927dc2c8 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]
4  UIKitCore                      0x1935b8548 __43-[UICollectionView _updateVisibleCellsNow:]_block_invoke_4.1070
5  UIKitCore                      0x1935b8000 __43-[UICollectionView _updateVisibleCellsNow:]_block_invoke.1053
6  libdispatch.dylib              0x191221298 _dispatch_call_block_and_release
7  libdispatch.dylib              0x191222280 _dispatch_client_callout
8  libdispatch.dylib              0x1911d123c _dispatch_main_queue_callback_4CF$VARIANT$mp
9  CoreFoundation                 0x191568c30 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
10 CoreFoundation                 0x1915630e8 __CFRunLoopRun
11 CoreFoundation                 0x191562200 CFRunLoopRunSpecific
12 GraphicsServices               0x1a765d598 GSEventRunModal
13 UIKitCore                      0x193e28004 -[UIApplication _run]
14 UIKitCore                      0x193e2d5d8 UIApplicationMain
15 App                            0x100dd2d1c main + 49 (main.m:49)
16 libdyld.dylib                  0x191241598 start

有没有人遇到同样的问题?你能重现它吗?

iOS Swift UIColitalView 崩溃 UIKitUp

评论

0赞 Yuri Reis 10/15/2020
我也有同样的崩溃。与您的症状相同(iOS 14 上的数字飙升)。不幸的是,我仍然无法复制它。
0赞 Raj 10/16/2020
我在 tvOS 14 中观察到了这种崩溃。相同的错误消息。当 performBatchUpdates 中的 deleteItems、reloadItems、insertItems 时会发生这种情况。不知道真正的原因是什么。
0赞 Mikhail Maslo 10/16/2020
是的,我们发现它发生在呼入之后和之前updatescompletionperformBatchUpdates(_:completion:)
0赞 Allen P 10/23/2020
我也在我的应用程序中看到了这一点。您是否碰巧也在使用 NSFetchedResultsController 来更新集合视图,@MikhailMaslo?
1赞 Mikhail Maslo 11/20/2020
@YuriReis 很抱歉回复晚了。我们可能进行了 contentOffset 调整,但我们无法找到此崩溃与程序化 contentOffset 更改之间的联系(尽管我们没有彻底检查这种情况)。此外,我们注意到在 iOS 14.2 中,此问题似乎已得到解决(iOS 14.2 上没有用户受到影响)。因此,当所有用户更新到较新的iOS版本时,我们可能会耐心等待

答: 暂无答案