我正在尝试筛选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

简单! ;)

10-08 05:46