【问题标题】:Error in Realm invalid property name when I want to filter data, property not found当我想过滤数据时,领域中的错误属性名称无效,找不到属性
【发布时间】:2021-10-31 03:20:14
【问题描述】:

当我想过滤我的数据时,我收到错误 *** 由于未捕获的异常“无效的属性名称”而终止应用程序,原因:“在“书”类型的对象中找不到“属性”。我的结构:

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({ $0.category == "read"})

但我也试过这个:

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

由于存在版本问题,我确实更新了我的领域 pod。

【问题讨论】:

    标签: swift xcode realm realm-database


    【解决方案1】:

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

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

    在你的情况下是:

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

    【讨论】:

      【解决方案2】:

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

      修正错别字

      let filteredread = realm.objects(Book.self).filter({ $0.category == "read"})
      

      应该是

      let filteredread = realm.objects(Book.self).filter { $0.category == "read"}
      

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

      该查询将首先读取所有 Book 对象,然后对结果执行 Swift 过滤器并返回 LazyFilterSequence 对象。这意味着结果与 Realm 断开连接并且不会自动更新,这是 Realm 的关键特性之一。

      如果你想更新结果,不要使用 Swift 函数;仅使用领域函数

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

      它返回一个结果,它将随着基础数据的变化而自动更新。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        • 2020-09-21
        • 2023-03-26
        • 2018-03-28
        • 2017-01-19
        • 2019-03-22
        • 1970-01-01
        相关资源
        最近更新 更多