可以在单独的线程中使用 NSFetchedResultsController 来加载 TableViewCells 吗?
Posted
技术标签:
【中文标题】可以在单独的线程中使用 NSFetchedResultsController 来加载 TableViewCells 吗?【英文标题】:OK to use NSFetchedResultsController in separate thread to load TableViewCells? 【发布时间】:2013-12-28 02:35:54 【问题描述】:基本上我正在尝试加载一个充满CoreData
实体的UITableView
。我想将NSFetchedResultsController
的批量大小设置为0,然后使用GCD
线程在每个单元格上加载每个对象:
[_fetchedResultsController objectAtIndexPath:indexPath];
这个线程安全吗?
【问题讨论】:
【参考方案1】:不,您的获取结果控制器和表格视图都不是线程安全的。
如果我没记错的话,您可以从后台线程执行核心数据,但是您需要为每个线程单独的 NSManagedObjectContext 来访问您的数据。
在任何情况下,您都不能从单独的后台线程进行 UI 更改(例如加载表格视图内容)。 UIView 对象不是线程安全的,句号。
【讨论】:
感谢您的回复。我的意思是实际上想在 GCD 上的 UITableView 中下载一个缩略图,只要你不接触 UIKit,它就可以工作。只是好奇,但为什么 NSFetchedController 比将数据加载到数组中要好得多?你碰巧知道吗? NSFetchedResultsController 是一个核心数据控制器对象,它在核心数据数据库和表视图之类的东西之间进行调解。一旦您了解了如何使用 Core Data,就可以执行诸如添加自动过滤结果的搜索字段、只需单击标题即可按不同列对表视图进行排序等操作。以上是关于可以在单独的线程中使用 NSFetchedResultsController 来加载 TableViewCells 吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在单独的线程中将 QObject 设置为 QML 上下文属性?