Как исправить «NSInvalidArgumentException», причина: «- [__NSCFNumber caseInsensitiveCompare:]: нераспознанный селектор, отправленный экземпляру»? - PullRequest
0 голосов
/ 07 июня 2019

Я создаю новое приложение, и мне нужна помощь с тем, чтобы моя сущность Core Data обновляла поле при щелчке по соответствующей ячейке tableView.

Я пытался найти ошибку и похожие ошибки, но все, что могнаходка была в Objective-c или более старой версии swift.Я использую Swift.Я также использую NSFetchedResultsController для извлечения данных.

Это мой tableView сделал selectRowAt

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let item = fetchedRC.object(at:indexPath)

    /*if item.isComplete {
        item.setValue(false, forKey: "isComplete")
        //item.isComplete = false
    } else {
        item.setValue(true, forKey: "isComplete")
        //item.isComplete = true
    }*/

    item.isComplete.toggle()

    do {
        try context.save()
        tableView.reloadRows(at: [indexPath], with: .automatic)
    } catch let error as NSError {
        print("Could not save. \(error.localizedDescription)")
    }
}

Когда пользователь нажимает на ячейку, я хочу, чтобы IsComplete переключал ее значение в соответствии сесли это правда или ложь.Но вместо этого в действительности происходит сбой, когда он вызывает setValue в обоих случаях оператора if.Сообщение об ошибке:

*** Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [__ NSCFNumber caseInsensitiveCompare:]: нераспознанный селектор, отправленный экземпляру 0x9321d02e963b75fc'

РЕДАКТИРОВАТЬ: Я считаю, что это где объявление isComplete будет

extension Item {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Item> {
        return NSFetchRequest<Item>(entityName: "Item")
    }

    @NSManaged public var name: String?
    @NSManaged public var isComplete: Bool
    @NSManaged public var list: List?

}

И DidSet:

var detailedList: List! {
    didSet {

   }
}

Запрос и сортировка

let request = Item.fetchRequest() as NSFetchRequest<Item>
    request.predicate = NSPredicate(format: "list = %@", parentObj)
    let sort = NSSortDescriptor(key: #keyPath(Item.isComplete), ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
    request.sortDescriptors = [sort]
    do {
        fetchedRC = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
        try fetchedRC.performFetch()
        self.tableView.reloadData()
    } catch let error as NSError{
        print(error.localizedDescription)
    }

    fetchedRC.delegate = self

1 Ответ

0 голосов
/ 07 июня 2019

Ошибка возникает из-за невозможности сортировки значений Bool с помощью селектора caseInsensitiveCompare.

Просто используйте стандартный дескриптор

let sort = NSSortDescriptor(key: #keyPath(Item.isComplete), ascending: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...