'Cannot sort on key path, property does not exist' - RealmSwift



所以我得到了这个致命错误:

由于未捕获的异常"RLMException"而终止应用程序,原因:"无法对键路径"title"进行排序:属性"Item.title"不存在。">

我有一个Class Category,其中包含我的Class Item的列表,两者具有链接对象关系。我正在使用Realm,在我的表视图中单击"类别"单元格时出现错误,该单元格将使我进入所选类别中所有项目的表视图。这是函数(这两个变量在我的文件的开头,我把它们放在这里,这样你就可以看到了(:

var toDoItems : Results<Item>?
var selectedCategory : Category? {
    didSet {
        loadItems()
    }
}

func loadItems() {
    toDoItems = selectedCategory?.items.sorted(byKeyPath: "title", ascending: true)
    
    tableView.reloadData()
}

需要明确的是,selectedCategory是通过tableView.indexPathForSelectedRow属性在我的CategoryViewController中设置的,这就是它在我的ToDoListViewController中获取值的方式,loadItems((函数就在这里。下面是我的Category和Item类(当然在它们自己的文件中(:

import Foundation
import RealmSwift
class Category: Object {
    dynamic var name: String = ""
    let items = List<Item>()
}
import Foundation
import RealmSwift
class Item: Object {
    dynamic var title: String = ""
    dynamic var done: Bool = false
    dynamic var dateCreated: Double = 0.0
    var parentCategory = LinkingObjects(fromType: Category.self, property: "items")
}

为什么我收到Item.title属性不存在的错误?显然是这样。我已经擦除并重写了变量,重新启动了Xcode等,但错误仍然存在。提前感谢您的帮助!

您的Realm对象构造不正确。您需要将各个属性标记为@objc

class Item: Object {
    @objc dynamic var title: String = ""

或将整个对象标记为@objmembers

@objcMembers class Item: Object {
    dynamic var title: String = ""

我预先指定了每个属性,因为它提供了更多的控制,因为有些属性我并不总是希望管理所有的变量。

要回答下面关于应用程序仍然崩溃的原因的部分,我所要做的就是转到我的模拟器,删除模拟器上的应用程序,然后重新启动它。修复!

相关内容

最新更新