所以我得到了这个致命错误:
由于未捕获的异常"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 = ""
我预先指定了每个属性,因为它提供了更多的控制,因为有些属性我并不总是希望管理所有的变量。
要回答下面关于应用程序仍然崩溃的原因的部分,我所要做的就是转到我的模拟器,删除模拟器上的应用程序,然后重新启动它。修复!