使用Sections过滤Core Data填充的TableView最便宜的方法是什么?

时间:2015-06-10 18:32:09

标签: ios core-data nsfetchedresultscontroller

我有一个由Core Data填充的tableview,其中包含多个动态部分,我想使用UISearchController搜索特定记录。我发现的每个教程都说使用了一个获取结果数组,并结合了一个过滤后的数组来显示结果,但这对维护我的tableview部分来说很痛苦。

我完全可以使用的代码,因为每次用户在搜索字段中输入时我只会执行一次获取,但我发现这对资源来说更贵。

那么在维护我的tableview部分时如何在数组上实现过滤器呢?数组数组?

我目前的代码:

//MARK: Search Deletegate Methods
func updateSearchResultsForSearchController(searchController: UISearchController) {
    let searchText = self.searchController.searchBar.text
    let selectedScopeButtonIndex = self.searchController.searchBar.selectedScopeButtonIndex
    self.filterContentForSearch(searchText, scope: selectedScopeButtonIndex)
    self.tableView.reloadData()

}


func filterContentForSearch(searchText: String, scope: Int)
{
    println("Fired")
    //Way too expensive for resources

    var fetchRequest = NSFetchRequest()
    fetchRequest = NSFetchRequest(entityName: "FoodItem")
    let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
    let mealDescriptor = NSSortDescriptor(key: "meal", ascending: true)
    fetchRequest.sortDescriptors = [mealDescriptor,sortDescriptor]
    //Predicate
    if searchText != ""
    {
    let namePredicate = NSPredicate(format: "name CONTAINS[cd] %@", searchText)
    fetchRequest.predicate = namePredicate
    }
    fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: "meal", cacheName: nil)
    fetchedResultsController.delegate = self
    fetchedResultsController.performFetch(nil)
}

0 个答案:

没有答案