Search code examples
iosswiftnssortdescriptor

Error in my call : Incorrect Argument Label In Call (have 'key:', expected 'coder:')


I am receiving an error in my method that sorts my table view cells in Swift.

The error comes from the func loadDataFromDatabase() on the line:

let sortDescriptor = NSSortDescriptor(key: sortPriority)

My table View Controller file:

import UIKit
import CoreData

class noteTableViewController: UITableViewController {
    var notes = [Note]()

    var managedObjectContext: NSManagedObjectContext? {
        return (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    }

    func loadDataFromDatabase() {
        let settings = UserDefaults.standard

        let sortPriority = settings.string(forKey: Constants.kPriority)

        let context = appDelegate.persistentContainer.viewContext

        let request = NSFetchRequest<NSManagedObject>(entityName: "Note")

        let sortDescriptor = NSSortDescriptor(key: sortPriority)

        let sortDescriptorsArray = [sortDescriptor]

        request.sortDescriptors = sortDescriptorsArray

        do {
            notes = try context.fetch(request)
        } catch let errer as NSError {
            print("Could not fetch. \(error), \(error.userInfo)")
        }
    }
}

Solution

  • The way you're doing is confusing compiler with the init(coder:) initializer. To use the initializer you want, you also need to provide ascending argument:

    let sortDescriptor = NSSortDescriptor(key: sortPriority, ascending: true)