Я создаю новое приложение, и мне нужна помощь с тем, чтобы моя сущность 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