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。最好的办法是将结果中的对象复制到数组中。
在我的例子中,使用数组(RLMArray
或 NSArray
)对我不起作用,因为我需要稍后进行进一步的子选择,所以我最终得到了以下解决方案(依赖于我的标识符 属性):
RLMResult *result = ...
NSMutableArray *ids = [NSMutableArray arrayWithCapacity:results.count];
for (MyObj *obj in results)
{
[ids addObject:obj.identifier];
}
results = [MyObj objectsWhere:@"identifier IN %@", ids];
Realm 的 RLMResults
是一个自动更新的容器。通常,自动更新是一件好事,但我正在为特定应用程序而苦苦挣扎:
我将模型对象数组发送到服务器,如果发送成功,则将它们从 Realm 中删除。由于这可以同时发生,因此每个模型都有一个 currentlyProcessing
属性。我将 objectsWhere()
与谓词一起使用,查询未处理的对象,将它们设置为正在处理,然后旨在删除这些相同的对象。由于 RLMResults 容器是自动更新的,原来的 unprocessedObjects
RLMResults 是空的,删除那个特定的集合并不简单。
有什么办法可以关闭自动更新吗?或者制作 RLMResults
?
目前无法获得 'frozen' RLMResults
,但 support is forthcoming。最好的办法是将结果中的对象复制到数组中。
在我的例子中,使用数组(RLMArray
或 NSArray
)对我不起作用,因为我需要稍后进行进一步的子选择,所以我最终得到了以下解决方案(依赖于我的标识符 属性):
RLMResult *result = ...
NSMutableArray *ids = [NSMutableArray arrayWithCapacity:results.count];
for (MyObj *obj in results)
{
[ids addObject:obj.identifier];
}
results = [MyObj objectsWhere:@"identifier IN %@", ids];