【发布时间】:2016-05-16 23:49:10
【问题描述】:
大家好,我有一个使用 Core Data 和 NsFetchedResultsController 的应用程序,我正在使用 searchBar 来搜索 3 个实体中的属性。
问题自然是每个实体都有不同的属性。但我想使用来自用户的相同 searchBar 输入一次搜索所有 3 个实体。
所有 3 个实体都有一个属性“name”,其想法是搜索所有在“name”属性中包含 searchBar 字符串的实体。
到目前为止,我只能搜索 1 个实体,因为我正在使用此代码:
// MARK: - Fetched results controller
var fetchedResultsController: NSFetchedResultsController {
if _fetchedResultsController != nil {
return _fetchedResultsController!
}
let fetchRequest = NSFetchRequest()
// Edit the entity name as appropriate.
let entity = NSEntityDescription.entityForName("Category", inManagedObjectContext: moc)
fetchRequest.entity = entity
// Set the batch size to a suitable number.
fetchRequest.fetchBatchSize = 20
// Edit the sort key as appropriate.
let sortDescriptor = NSSortDescriptor(key: "index", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil)
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController
do {
try _fetchedResultsController!.performFetch()
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
//print("Unresolved error \(error), \(error.userInfo)")
abort()
}
return _fetchedResultsController!
}
// MARK: - Search
var searchController: UISearchController? = nil
func reloadFRC(predicate: NSPredicate?) {
fetchedResultsController.fetchRequest.predicate = predicate
performFecth()
}
//Delegate: UIsearchController
func updateSearchResultsForSearchController(searchController: UISearchController) {
if let searchBarText = searchController.searchBar.text {
var predicate: NSPredicate?
if searchBarText != "" {
predicate = NSPredicate(format: "name contains[cd] %@", searchBarText)
}
self.reloadFRC(predicate)
}
}
//Delegate: UISearchBar
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
self.reloadFRC(nil)
}
//Configure Search
func configureSearch() {
self.searchController = UISearchController(searchResultsController: nil)
if let _searchController = self.searchController {
_searchController.delegate = self
_searchController.searchResultsUpdater = self
_searchController.dimsBackgroundDuringPresentation = false
_searchController.searchBar.delegate = self
_searchController.searchBar.sizeToFit()
_searchController.searchBar.barTintColor = Utils.colorFromHex(0x2FC5DA)
_searchController.searchBar.tintColor = Utils.colorFromHex(0x585858)
self.tableView.tableHeaderView = _searchController.searchBar
} else {print("ERROR configuring _searchController in %@", #function)}
}
那么,我该怎么做呢?
【问题讨论】:
标签: swift core-data ios9 uisearchbar nsfetchedresultscontroller