【问题标题】:UICollectionView cells hidden after controllerDidChangeContent在 controllerDidChangeContent 之后隐藏的 UICollectionView 单元格
【发布时间】:2017-05-05 03:05:24
【问题描述】:
我有一个UICollectionView,其dataSource 由NSFetchedResultsController 支持。
单元格有时会在内容更改发生后隐藏。它们保留为集合视图的子视图,但 isHidden == true。我的任何代码都没有显式隐藏单元格,isHidden 的属性观察器永远不会被触发。
提示:我们的代码确实有一个救助案例,它可以修改 cellForItem... 或 willDisplayCell 中的核心数据
【问题讨论】:
标签:
ios
core-data
uicollectionview
nsfetchedresultscontroller
【解决方案1】:
问题在于,有时我们会尝试构造所请求的单元格,失败并在返回单元格的后备版本之前修改 CoreData。
cellForItem 或willDisplayCell 在主线程上运行,我们使用performWithBlockAndWait 来修改CoreData。
这导致在集合视图仍在更新单元格时,主线程上集合视图的 dataSource 发生了变化。
简单的解决方法是使用performWithBlock 而不是performWithBlockAndWait。现在集合视图有机会在数据模型更改之前完成自我更新。
更好的解决方法是在我们到达cellForItem 或willDisplayCell 时使此类失败成为不可能。