我想通过删除最早的Event
对象来清除我的事件日志,但似乎没有任何直接的方法来执行此操作。我可以根据我想要删除它们的方式获取所有对象,但是没有办法限制它 - 即我只想要RLMResults中的前100个。
RLMResults <Event *> *events = [[Event allObjects] sortedResultsUsingProperty:@"id" ascending:YES];
如果我循环并通过索引删除它们events
会随着时间的推移而更新,这样就无法工作。
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
for (NSInteger i = 0; i < numberToPurge; i++) {
[realm deleteObject:events[i]];
}
[realm commitWriteTransaction];
我可以将它们添加到一个单独的数组然后用它来删除,这种方式有效但看起来有点笨重,有更好的方法吗?
NSMutableArray *purgeEvents = [[NSMutableArray alloc] initWithCapacity:numberToPurge];
for (NSInteger i = 0; i < numberToPurge; i++) {
[purgeEvents addObject:events[i]];
}
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm deleteObjects:events];
[realm commitWriteTransaction];
答案 0 :(得分:1)
没有。目前,您使用的方法只是将要删除的对象复制到NSArray
,然后将其传递回父RLMRealm
对象,这是删除对象子集的推荐方法。此时此刻。它在Realm docs中提到了here。
如果您对如何更好地处理此问题有任何想法,请随时在the Realm Cocoa GitHub上提交问题!
答案 1 :(得分:1)
反过来迭代集合。
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
for (NSInteger i = numberToPurge-1; i >= 0; i--) {
[realm deleteObject:events[i]];
}
[realm commitWriteTransaction];