CollectionView cellForItemAt IndexPath 中的 SIGTRAP(TRAP_BRKPT) 崩溃

Posted

技术标签:

【中文标题】CollectionView cellForItemAt IndexPath 中的 SIGTRAP(TRAP_BRKPT) 崩溃【英文标题】:SIGTRAP(TRAP_BRKPT) Crash in CollectionView cellForItemAt IndexPath 【发布时间】:2018-09-02 12:42:50 【问题描述】:

我在我的生产应用程序中遇到了这个奇怪的崩溃。崩溃并不频繁,我无法重现它。

Crashed: com.apple.root.background-qos
0  AppName                    0x104a4c040 ViewController.(collectionView(UICollectionView, cellForItemAt : IndexPath) -> UICollectionViewCell).(closure #1) (ViewController.swift:1018)
1  AppName                    0x104a95270 _T0Ieg_IeyB_TR (Gif.swift)
2  libdispatch.dylib              0x1821cd088 _dispatch_call_block_and_release + 24
3  libdispatch.dylib              0x1821cd048 _dispatch_client_callout + 16
4  libdispatch.dylib              0x1821da378 _dispatch_root_queue_drain + 1028
5  libdispatch.dylib              0x1821d9f10 _dispatch_worker_thread3 + 120
6  libsystem_pthread.dylib        0x182473130 _pthread_wqthread + 1268
7  libsystem_pthread.dylib        0x182472c30 start_wqthread + 4

我正在使用后台队列更新collectionView 的cellForItemAt IndexPath 中的核心数据对象。我正在使用父子托管对象上下文来更新核心数据。

在第 1018 行我有

DispatchQueue.global(qos: .background).async 
    DatabaseOperations.sharedInstance.incomingMessageRead(true, message.messageId!)
            

位于 cellForItem 方法中。谁能让我知道导致崩溃的原因以及我能做些什么来防止它?谢谢。

【问题讨论】:

通常 sigtrap 用于意外 nil,因此您可以 guard let 这部分 message.messageId! 看看这是否有帮助 我是这么认为的,因为message.messageId! 在后台异步线程中,所以很有可能释放message 对象。但是不应该有像unexpectedly found nil while unwrapping...这样的错误消息吗? 不要在cellForItemAt 中运行异步任务。滚动时可以立即释放单元格。 cellForItem 用于将 model 分配给 view,而不是用于 controller 东西 加载单元格时,我将传入消息设置为read。我尝试在主线程上运行它,它导致 FRC 出现问题。因为 collectionView 完全依赖于 FRC。将传入消息设置为read 的最佳方法是什么?谢谢 @sloik 请将您的评论作为答案发布,以便在解决崩溃时将其标记为已接受。谢谢。 【参考方案1】:

通常 sigtrap 用于意外 nil,因此您可以保护 let 这部分:

message.messageId!

【讨论】:

以上是关于CollectionView cellForItemAt IndexPath 中的 SIGTRAP(TRAP_BRKPT) 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 UIcollectionview 中使多个单元格出列的方法

Swift-从另一个ViewController插入TableView中的项目

我显示了单元格,但是当我按下按钮时,我希望图像显示在集合视图单元格中

CollectionView 中的 CollectionView:使用 didSelectItemAt 执行Segue

为啥 CollectionView 单元格内部其他 collectionView 的大小错误?

CollectionView 单元格出现在 collectionView 之外。