Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get item with max id?

Tags:

ios

swift

realm

I'm tryig to get the ítem with max id using this query

realm.objects(Entity).filter("@max.id").first

It's throwing an error saying that can't parse query so it seems this is not the correct way to do it.

How can I write this query on Realm for Swift?

like image 532
StackOverflower Avatar asked Dec 18 '22 23:12

StackOverflower


2 Answers

Filters alone cannot do what you're after as they only consider a single top-level object at a time.

Beyond that conceptual issue, there are a few issues with the code you posted:

  1. @"@max.id" is not a valid NSPredicate format string. NSPredicate format strings must be composed of comparisons between expressions, not expressions on their own.

  2. Collection operators such as @max must be applied to a collection. In your example it is being applied to an Entity. Since an Entity is not a collection, the predicate would not be valid. It would be valid to apply a collection operator to a List property on Entity though.

Something like the following should do what you're after:

let entities = realm.objects(Entity)
let id = entities.max("id") as Int?
let entity = id != nil ? entities.filter("id == %@", id!).first : nil
like image 113
bdash Avatar answered Dec 21 '22 22:12

bdash


I'm using Xcode 8.0 and Swift 3.0

Following worked for me:

let allEntries = realm.objects(Model.self)
if allEntries.count > 0 {
    let lastId = allEntries.max(ofProperty: "id") as Int?
    return lastId! + 1
} else {
    return 1
}
like image 45
Sandu Avatar answered Dec 22 '22 00:12

Sandu