如何在后台线程中从 NSFetchedResultsController 加载大数据
Posted
技术标签:
【中文标题】如何在后台线程中从 NSFetchedResultsController 加载大数据【英文标题】:How to load large data from NSFetchResultController in background thread 【发布时间】:2015-03-11 06:40:36 【问题描述】:我正在使用NSFetchResultController
显示来自核心数据的UICollectionView
中的数据。 UICollectionViewCell
包含表格视图。所以简而言之,UITableView
中显示了非常大量的数据。我也在显示NSFetchResultController
以在该表视图中显示数据。
现在的问题是当我滚动UICollectionView
时,它会从数据库加载数据以显示在UITableView
中。由于数据量很大,所以UICollectionView
的滚动非常不稳定。任何帮助
我虽然我应该将获取请求移动到后台线程,但它开始崩溃应用程序并给出期望
Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSSetM: 0x15722f80> was mutated while being enumerated.'
【问题讨论】:
我建议根据您当前的描述,您有许多问题需要解决。我是否正确理解您在每个集合视图中都嵌入了UITableView
?如果是这种情况,我建议您控制 FRC 为每个表视图获取的数据量,也许是表视图空间中可以显示的数据量的两倍?然后为每个集合视图安装一个触发器,当点击/选择该触发器时,会对该表视图的所有数据执行另一次提取。另外,我建议您阅读有关如何执行有效提取的信息 - Marcus S Zarra 的核心数据,第二版
您的错误与您无法在枚举期间改变/更改NSMutableSet
的事实有关。
【参考方案1】:
我认为@andrew 是对的,问题出在您的数组中,请确保您的数组或用于此目的的任何 datalist 控件必须是可变的,只要是可变的,它就会解决您的问题。
请参阅下面的答案,就像您提出的问题一样。
Collection was mutated while being enumerated error in objective C
【讨论】:
以上是关于如何在后台线程中从 NSFetchedResultsController 加载大数据的主要内容,如果未能解决你的问题,请参考以下文章
Android:使用“进度”GUI在后台线程中从网络加载数据? [复制]
CoreData 是不是可以在另一个上下文/后台任务中从一个上下文/线程安全地使用 NSManagedObject
如何在android Q os中从后台服务启动活动,而不从开发人员选项的设置中单击“允许后台活动启动”?