当我要过滤数据时,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 是一个结果,它将随着基础数据的变化自动更新。
注意:该函数与您的问题相匹配,是完全合法的代码,不会引发任何错误。
我收到错误 *** 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函数;仅使用领域功能
let filteredread = realm.objects(Book.self).filter("category == 'read'")
其中 return 是一个结果,它将随着基础数据的变化自动更新。
注意:该函数与您的问题相匹配,是完全合法的代码,不会引发任何错误。