可以在Realm中使用@max吗?

时间:2016-08-31 01:22:40

标签: swift realm

我有一个对象,比如说

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的任务。但我想知道我是否可以将它与过滤器一起使用。

2 个答案:

答案 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。