我已经阅读了大量类似的问题,但看起来没有答案。
我有一个后台线程,可以获取数据。
// bg queue
let context = // private context with NSPrivateQueueConcurrencyType
users = Model.MR_findAllSortedBy("username", ascending: true, inContext: context) as! [Model]
我想用[Model]数组在主线程中重新加载tableView。
如果我将users
直接传递给主线程,则会导致未定义的行为(根据CD文档)。
另一方面,我有两个选择:
处理它的正确方法是什么?
答案 0 :(得分:0)
最好的设置是使用带有NSFetchedResultsController
的表格视图(也非常方便地使用魔法记录)并实现NSFetchedResultsControllerDelegate
,它将自动更新表格。
只需获取所有内容并在主线程上轻松完成排序(FRC将优化并仅获取表视图需要显示的内容)。这意味着您对选项1的假设是不正确的。
do { fetchedResultsController.performFetch() } catch {}
tableView.reloadData()
就是你所需要的一切。