如何在Realm中获取非自动更新结果集?

时间:2015-02-06 01:38:32

标签: ios swift realm

Realm' RLMResults是一个自动更新容器。通常情况下,自动更新是一件好事,但我为特定应用而苦苦挣扎:

我将模型对象数组发送到服务器,然后如果发送成功则从Realm中删除它们。由于这可以同时发生,因此每个模型都具有currentlyProcessing属性。我使用objectsWhere()和谓词查询未处理的对象,将它们设置为处理,然后瞄准删除那些相同的对象。由于RLMResults容器是自动更新的,因此原始unprocessedObjects RLMResults为空,删除该特定集不是直截了当的。

有没有办法关闭自动更新?或制作RLMResults的不可变副本?

2 个答案:

答案 0 :(得分:3)

目前,无法获得“冻结”RLMResults,但support is forthcoming。您最好的选择是将对象中的对象复制到数组中。

答案 1 :(得分: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];