2015-09-27 91 views
4

我tryig使用此查詢如何獲得最大ID的項目?

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

它拋出一個錯誤,說這樣看來,這不是做了正確的方式,無法解析查詢來獲取與最大id項目。

如何在Swarm上的Realm上編寫此查詢?

回答

8

過濾器本身並不能完成你以後的工作,因爲他們一次只考慮一個頂級對象。

除此之外概念問題,還有與你發佈的代碼的幾個問題:

  1. @"@max.id"不是有效NSPredicate format stringNSPredicate格式字符串必須由表達式之間的比較組成,而不是表達式本身。

  2. 集合運營商(如@max)必須應用於集合。在你的例子中,它被應用於Entity。由於Entity不是集合,所以謂詞無效。儘管如此,將集合運算符應用於List屬性Entity上也是有效的。

類似下面應該做你以後:我使用的Xcode 8.0和3.0雨燕

let entities = realm.objects(Entity) 
let id = entities.max("id") as Int? 
let entity = id != nil ? entities.filter("id == %@", id!).first : nil 
+0

真棒回答,謝謝!我想知道如果從數據庫加載所有元素(如果存在相當多的數字),是否會出現嚴重的性能損失,只是爲了找到最大的ID – StackOverflower

+0

領域的查詢是懶惰的,所以只有一個'Entity'對象會被這種方法加載。 – bdash

+0

我實際上在嘗試你的代碼時遇到了這個錯誤(對不起,我直到現在還不能測試它,但看起來非常穩固)。無法推斷泛型參數'U'的參數。它似乎與'max'方法有關 – StackOverflower

2

我繼工作:

let allEntries = realm.objects(Model.self) 
if allEntries.count > 0 { 
    let lastId = allEntries.max(ofProperty: "id") as Int? 
    return lastId! + 1 
} else { 
    return 1 
} 
相關問題