我有一个对象,比如说
class Task:Object {
dynamic var id:Int = 0
dynamic var name:String = ""
override func primaryKey() -> String {
return "id"
}
}
当我使用带最大值的过滤器时
let tasks = realm.allObjects(ofType: Task.self)
let results = tasks.filter(using: "id.@max")
我收到了错误:
无法解析格式字符串“id。@ max”。
然后我意识到我应该使用
let results = tasks.filter(using: "id == id.@max")
然后我又出了一个错误:
由于未捕获的异常“无效的谓词”而终止应用,原因: '聚合操作只能用于包含一个的关键路径 数组属性'
现在我想知道如果我想在过滤器中使用@max,我该怎么办?
我知道我可以使用sorted
来获取具有最大ID的任务。但我想知道我是否可以将它与过滤器一起使用。
答案 0 :(得分:2)
要检索具有最大ID的任务,您可以执行以下操作:
let tasks = realm.allObjects(ofType: Task.self)
let id = tasks.maximumValue(ofProperty: "id") as Int?
let newestTask = realm.object(ofType: Task.self, forPrimaryKey: id)
@max
为此目的不起作用的原因是它评估集合成员的属性的最大值,但谓词是在每个单独项的上下文中计算的
答案 1 :(得分:0)
因为id
无法使用@max。答案是不。 @max
只能在List属性或类似的东西中使用,id
是Int。