清除Realm中的x对象

时间:2016-05-25 01:30:54

标签: objective-c realm

我想通过删除最早的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];

2 个答案:

答案 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];