簡體   English   中英

如何修復“'NSInvalidArgumentException',原因:'-[__NSCFNumber caseInsensitiveCompare:]:無法識別的選擇器發送到實例”?

[英]How to fix "'NSInvalidArgumentException', reason: '-[__NSCFNumber caseInsensitiveCompare:]: unrecognised selector sent to instance"?

我正在創建一個新應用程序,需要幫助讓我的 Core Data 實體在單擊相應的 tableView 單元格時更新字段。

我試過谷歌搜索錯誤和類似的錯誤,但我能找到的一切都在 Objective-c 或舊版本的 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根據它是真還是假來切換其值。 但相反,它實際上是在 if 語句的兩種情況下調用“setValue”時崩潰。 錯誤信息是:

*** 由於未捕獲的異常“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

發生此錯誤是因為您無法使用caseInsensitiveCompare選擇器對Bool值進行排序。

只需使用標准描述符

let sort = NSSortDescriptor(key: #keyPath(Item.isComplete), ascending: true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM