【问题标题】:'Cannot sort on key path, property does not exist' - RealmSwift“无法按关键路径排序,属性不存在” - RealmSwift
【发布时间】:2020-07-21 16:57:28
【问题描述】:

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

由于未捕获的异常“RLMException”而终止应用程序,原因:“无法按关键路径“标题”排序:属性“Item.title”不存在。”

我有一个类类别,其中包含我的类项列表,并且两者具有链接对象关系。我正在使用 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 等,但错误仍然存​​在。提前感谢您的帮助!

【问题讨论】:

    标签: swift xcode class properties realm


    【解决方案1】:

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

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

    或将整个对象标记为@objmembers

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

    我更喜欢指定每个属性,因为它可以提供更多控制,因为有些我并不总是希望所有 var 都得到管理。

    【讨论】:

    • 谢谢,我试过了,然后我得到了这个错误:线程1:致命错误:'try!'表达式意外引发错误:错误域 = io.realm 代码 = 10“由于以下错误,需要迁移:- 已添加属性 'Category.name'。- 已添加属性 'Item.title'。- 属性'已添加 Item.done'。-已添加属性 'Item.dateCreated'。" UserInfo={NSLocalizedDescription=由于以下错误需要迁移: - 添加了属性“Category.name”。 - 添加了属性“Item.title”。 - 属性 'Item.done' 已完成
    • 知道如何修复该错误或它的含义吗?在错误出现之前,该应用甚至无法启动
    • @derek 当然,这意味着您更改了 Realm 对象的架构,您必须添加一个 Migration 块来处理它。如果您正在开发中,有时删除所有 Realm 数据并重新开始会更容易。请注意,迁移的处理方式不同,具体取决于您使用领域、本地和同步的方式,然后新的 BETA MongoDB 领域也与这些不同。
    • 我的 Realm Studio 中几乎没有数据,即使我有,我认为它不会与您附加的链接中描述的新格式冲突,尽管如果删除数据是一个不错的选择,我该怎么做? (对不起,我对 Realm 很陌生)。此外,我将该链接中的大块代码粘贴到了我的 didFinishLaunchingWithOptions 中,我遇到了与以前相同的错误。我是否以某种方式执行错误?我对代码所做的唯一更改是将@objc 添加到每个属性,我不会像您发送的链接中的示例那样更改模型本身。谢谢
    • @derek 如果没有看到实际代码,您可能无法判断。这里有很多关于迁移块的问题,所以在我上面链接的文档和这里的一些搜索之间,你会发现很多好的和不同的例子。如果您只想清除所有数据,您可以手动删除文件或使用为您执行此操作的新功能之一。请参阅我对Deleting Realm Data 的回答。请务必在删除之前退出 Realm Studio。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2021-06-21
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多