How to initialize a NSFetchedResultsController in iOS 10 Swift 3

前端 未结 3 1050
挽巷
挽巷 2020-12-18 20:19

I can\'t get my NSFetchedResultsController initialized in iOS 10 using Swift 3 within CoreDataTableViewController from AECoreDataUI.

let request         


        
相关标签:
3条回答
  • 2020-12-18 20:46

    NSFetchRequest is now a generic. NSFetchedResultsController is a generic too. Therefore, when declaring variables, you have to use a generic declaration, e.g.:

    var fetchedResultsController: NSFetchedResultsController<NasaPicture>?
    
    0 讨论(0)
  • 2020-12-18 21:10

    when we need to declare variable, then we have to use a generic declaration please check below code for NSFetchedResultsController in swift 3..

     override func viewDidLoad() {
         super.viewDidLoad()
        do {
            try self.fetchedResultsController.performFetch()
        } catch {
            let fetchError = error as NSError
            print("Unable to Perform Fetch Request")
            print("\(fetchError), \(fetchError.localizedDescription)")
        }
    

    } // MARK: - NSFetchedResultsController

    fileprivate lazy var fetchedResultsController: NSFetchedResultsController<UserExistenceOnXMPPCD> = {
        let fetchRequest = NSFetchRequest<UserExistenceOnXMPPCD>(entityName: "UserExistenceOnXMPPCD")
        fetchRequest.sortDescriptors = [
            NSSortDescriptor(key: "name", ascending: true)]
    
        let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext:CoreDataController.sharedInstance.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
    
        try! fetchedResultsController.performFetch()
        fetchedResultsController.delegate = self
        if let quotes = fetchedResultsController.fetchedObjects {
            if quotes.count > 0 {
                print(quotes.count)
            }
        }
        return fetchedResultsController
    }()
    
    
    // MARK: - NSFetchedResultsController delegate methods
    func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)  {
        tableView.beginUpdates()
    }
    
    func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)  {
        tableView.reloadData()
    }
    
    0 讨论(0)
  • 2020-12-18 21:10

    Simply call the function:

    private func setupFetchedResultsController() {
    
        let context = NSManagedObjectContext.mr_default()
        let fetchRequest = NSFetchRequest<Month>(entityName: "Month")
        let dateDescriptor = NSSortDescriptor(key: "date", ascending: false)
    
        fetchRequest.sortDescriptors = [dateDescriptor]
    
        fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: "year", cacheName: nil)
        fetchedResultsController.delegate = self
    
        try! fetchedResultsController.performFetch()
        tableView.reloadData()
    }
    
    0 讨论(0)
提交回复
热议问题