Realm' RLMResults
是一个自动更新容器。通常情况下,自动更新是一件好事,但我为特定应用而苦苦挣扎:
我将模型对象数组发送到服务器,然后如果发送成功则从Realm中删除它们。由于这可以同时发生,因此每个模型都具有currentlyProcessing
属性。我使用objectsWhere()
和谓词查询未处理的对象,将它们设置为处理,然后瞄准删除那些相同的对象。由于RLMResults容器是自动更新的,因此原始unprocessedObjects
RLMResults为空,删除该特定集不是直截了当的。
有没有办法关闭自动更新?或制作RLMResults
的不可变副本?
答案 0 :(得分:3)
目前,无法获得“冻结”RLMResults
,但support is forthcoming。您最好的选择是将对象中的对象复制到数组中。
答案 1 :(得分:1)
在我的情况下,使用数组(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];