2015-02-06 50 views
1

Realm的RLMResults是一個自動更新容器。通常情況下,自動更新是一件好事,但我正在爲特定應用程序而苦苦掙扎:如何獲取Realm中的非自動更新結果集?

我發送了模型對象的數組到服務器,然後在發送成功的情況下將它們從Realm中刪除。由於這可能會同時發生,因此每個模型都有一個currentlyProcessing屬性。我使用objectsWhere()帶謂詞查詢未處理的對象,將它們設置爲處理,然後旨在刪除那些相同的對象。由於RLMResults容器是自動更新的,原始的unprocessedObjects RLMResults是空的,因此刪除該特定集合並非易事。

有什麼辦法可以關閉自動更新嗎?或者製作一個不可變的RLMResults副本?

+0

這是Realm的一個主要侷限性。我以前的使用並不需要它,但ATM我非常沮喪。複製到'RLMArray'對我來說不是一個解決方案,因爲我需要能夠在以後再次過濾/查詢。 – livingtech 2015-04-08 19:31:15

+0

完全相同的問題在這裏:我想要下載配置文件圖片在緩存中他們在一個被忽略的屬性。由於RLMResults自動重新加載映像永遠不會被緩存。如果我將圖像存儲在一個不被忽略的NSData中,整個列表將重新加載並且其他圖像將被下載兩次......這個限制令人非常沮喪,我不知道我是否應該回退coredata。 – Martin 2015-05-06 15:32:00

回答

3

現在,沒有辦法得到'凍結'RLMResults,但support is forthcoming。你最好的選擇是將你的對象從結果中複製到一個數組中。

+0

是的,那就是我最終做的。感謝您的高舉。 – Whoa 2015-02-06 20:12:49

+0

此答案中的鏈接不適用於此問題。它似乎更多關於在快速枚舉期間應如何關閉自動更新。我也想要一種方法來關閉自動更新。 – livingtech 2015-04-08 16:16:53

+0

@livingtech作爲鏈接(和其他問題狀態)theres沒有辦法禁用autoupdating(我們也稱爲凍結) – segiddins 2015-04-08 19:51:24

1

對我來說,它沒有工作對我來說,使用數組(RLMArrayNSArray),因爲我需要以後做進一步的子查詢,所以我結束了以下解決方案(這依賴於我的標識符物業):

RLMResult *result = ... 
NSMutableArray *ids = [NSMutableArray arrayWithCapacity:results.count]; 
for (MyObj *obj in results) 
{ 
    [ids addObject:obj.identifier]; 
} 
results = [MyObj objectsWhere:@"identifier IN %@", ids];