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

How to obtain a non-auto updating result set in Realm?

Realm 的 RLMResults 是一个自动更新的容器。通常,自动更新是一件好事,但我正在为特定应用程序而苦苦挣扎:

我将模型对象数组发送到服务器,如果发送成功,则将它们从 Realm 中删除。由于这可以同时发生,因此每个模型都有一个 currentlyProcessing 属性。我将 objectsWhere() 与谓词一起使用,查询未处理的对象,将它们设置为正在处理,然后旨在删除这些相同的对象。由于 RLMResults 容器是自动更新的,原来的 unprocessedObjects RLMResults 是空的,删除那个特定的集合并不简单。

有什么办法可以关闭自动更新吗?或者制作 RLMResults?

的不可变副本

目前无法获得 'frozen' RLMResults,但 support is forthcoming。最好的办法是将结果中的对象复制到数组中。

在我的例子中,使用数组(RLMArrayNSArray)对我不起作用,因为我需要稍后进行进一步的子选择,所以我最终得到了以下解决方案(依赖于我的标识符 属性):

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