当我要过滤数据时,Realm invalid 属性 name 出错,属性 not found

Error in Realm invalid property name when I want to filter data, property not found

我收到错误 *** Terminating app due to uncaught exception 'Invalid property name',原因:'属性 'read' not found in object of type 'Book'' when我想过滤我的数据。我的结构:

class Book: Object, Codable {
@objc dynamic var author = ""
@objc dynamic var title = ""
@objc dynamic var imageLink = ""
@objc dynamic var category = "Lk"
@objc dynamic var date = Date()

convenience init(withBookDict: [String: Any]) {
    self.init()

    self.author = withBookDict["author"] as? String ?? "No Author"
    self.title = withBookDict["title"] as? String ?? "No Title"
    self.imageLink = withBookDict["imageLink"] as? String ?? "No link"
    self.category = withBookDict["category"] as? String ?? "No category"
 }
}

我过滤数据的代码是这样的:

let filteredread = realm.objects(Book.self).filter({ [=13=].category == "read"})

但我也试过这个:

 let filteredread = realm.objects(Book.self).filter("category == 'read'")

我也确实更新了我的领域 pod,因为存在版本问题。

根据字符串属性过滤Realm结果的方法是:

 let filteredResult = realm.objects(Model.self).filter("propertyName == %@", "value")

在你的情况下它将是:

 let filteredread = realm.objects(Book.self).filter("category == %@", "read")

除了“拼写错误”之外,您的代码实际上没有任何问题 - 但还有其他问题需要考虑。

更正拼写错误

let filteredread = realm.objects(Book.self).filter({ [=10=].category == "read"})

应该是

let filteredread = realm.objects(Book.self).filter { [=11=].category == "read"}

请注意从过滤器函数(实际上是一个 Swift.filter)中删除 ()。这比任何事情都更清楚,因为在 Realm 对象上使用 swift 函数可能会导致问题。

该查询将首先读取所有 Book 对象,然后对结果和 return LazyFilterSequence 对象执行 Swift 筛选。这意味着结果与 Realm 断开连接并且不会自动更新,这是 realm 的主要功能之一。

如果要更新结果,请不要使用Swift函数;仅使用领域功能

let filteredread = realm.objects(Book.self).filter("category == 'read'")

其中 return 是一个结果,它将随着基础数据的变化自动更新。

注意:该函数与您的问题相匹配,是完全合法的代码,不会引发任何错误。