我正在尝试筛选UITableView,而无需涉及searchBar。
func filterResultsBasedOnSideViewController() {
print("filter value \(filterString)")
filteredPredicate = NSPredicate(format: "keyWords contains[c] %@", filterString)
filteredObjects = self.fetchedResultsController.fetchedObjects?.filter() {
return self. filteredPredicate!.evaluateWithObject($0)
} as! [myValues]?
self.tableView.reloadData()
}
但是调用此函数时实际上什么也没有发生。我在这里完全错了吗?
对于任何想知道的人,我的fetchedResultsController都如下所示:
var fetchedResultsController: NSFetchedResultsController {
if _fetchedResultsController != nil {
return _fetchedResultsController!
}
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
self.managedObjectContext = appDel.managedObjectContext
let fetchRequest = NSFetchRequest()
// Edit the entity name as appropriate.
let entity = NSEntityDescription.entityForName("myValues", inManagedObjectContext: self.managedObjectContext!)
fetchRequest.entity = entity
// Set the batch size to a suitable number.
fetchRequest.fetchBatchSize = 20
// Edit the sort key as appropriate.
let sortDescriptor = NSSortDescriptor(key: "sortID", 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: self.managedObjectContext!, sectionNameKeyPath: nil, cacheName: "Master")
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!
}
var _fetchedResultsController: NSFetchedResultsController? = nil
func controllerWillChangeContent(controller: NSFetchedResultsController) {
self.tableView.beginUpdates()
}
最佳答案
好的,这里是有效的代码。感谢每个人的意见,这些意见为我指明了正确的道路。
我创建了一个var filterIsOn = false
在我的NSFRC中,我放置了一个if语句:
if filterIsOn {
// print("is on")
let filteredText: NSString = sprite
filteredPredicate = NSPredicate(format: "keyWords contains[c] %@", filteredText)
let sortDescriptor = NSSortDescriptor(key: "sortID", ascending: true)
fetchRequest.predicate = filteredPredicate
fetchRequest.sortDescriptors = [sortDescriptor]
}
并更改了:
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil) //set cacheName to nil from "Master"
删除
func filterResultsBasedOnSideViewController() { }
并在需要过滤结果时设置filterIsOn = true
。简单! ;)