核心数据:后台获取

时间:2015-09-12 21:43:07

标签: ios multithreading core-data

我已经阅读了大量类似的问题,但看起来没有答案。

我有一个后台线程,可以获取数据。

// bg queue
let context = // private context with NSPrivateQueueConcurrencyType
users = Model.MR_findAllSortedBy("username", ascending: true, inContext: context) as! [Model]

我想用[Model]数组在主线程中重新加载tableView。 如果我将users直接传递给主线程,则会导致未定义的行为(根据CD文档)。

另一方面,我有两个选择:

  1. 在主要上下文中获取对象(这会导致UI块)
  2. 传递objectId,导致对象不存在(导致UI阻止)
  3. 处理它的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

最好的设置是使用带有NSFetchedResultsController的表格视图(也非常方便地使用魔法记录)并实现NSFetchedResultsControllerDelegate,它将自动更新表格。

只需获取所有内容并在主线程上轻松完成排序(FRC将优化并仅获取表视图需要显示的内容)。这意味着您对选项1的假设是不正确的。

do { fetchedResultsController.performFetch() } catch {}
tableView.reloadData()

就是你所需要的一切。