NSFetchedResultsController performFetch包含许多返回的项

时间:2015-07-03 15:48:33

标签: ios swift core-data nsfetchedresultscontroller

我正在构建一个实现实时文本搜索的应用程序,只要文本输入发生变化,就会查询数据库。 当NSFetchedResultsController的fetchRequest返回超过一定数量的项目(> ~20)时,键盘输入有效。

func textViewDidChange(textView: UITextView) {
    let predicate = NSPredicate("itemID" > 0) //<- returns all items
    self.frc.fetchRequest.predicate = predicate
    self.frc.executeFetchRequest(nil)
}

请注意,没有实际的UI更新,因此滞后键盘输入必须由fetchRequest引起。

有没有办法实现大量项目的实时搜索而没有这种滞后?

1 个答案:

答案 0 :(得分:1)

问题是,您正在主线程上执行提取并使用您的请求加载所有对象。你真的需要加载所有物品吗?首先,将fetchBatchSize设置为只有少量项目实际加载到内存中,当您在视图中滚动时,某些项目将自动加载而其他项目出现故障。如果这还不够,请考虑进行设计更改,您应该将实际提取移动到后台队列,并在结果出现时更新您的UI。这是一个很大的改变,因为如果用户必须取消先前正在进行的请求使搜索上下文无效(即他键入一个新字符)。