如何在removeAllObjects
中使用RLMArray
?
我收到'RLMException', reason: 'Attempting to mutate a readOnly RLMArray'
的错误。
#import "ViewController.h"
#import <Realm/Realm.h>
#import "Person.h"
@interface ViewController ()
@property RLMArray *list;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_list = [Person allObjects];
NSLog(@"%@", _list);
}
- (void)didReceiveMemoryWarning{
[super didReceiveMemoryWarning];
}
- (IBAction)addPerson:(id)sender {
Person *human = [[Person alloc] init];
human.name = @"John";
human.title = @"Wizard";
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm addObject:human];
[realm commitWriteTransaction];
}
- (IBAction)removePerson:(id)sender {
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[_list removeAllObjects];
[realm commitWriteTransaction];
}
@end
答案 0 :(得分:1)
我不是100%肯定,但我认为这应该有用。
- (IBAction)removePerson:(id)sender {
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm deleteObjects:_list];
[realm commitWriteTransaction];
}
答案 1 :(得分:1)
您使用的是哪个版本的Realm?从v0.87.0开始,查询返回RLMResults
个对象,而不是RLMArray
。这包括您在viewDidLoad:
方法中使用的allObjects
RLMObject
方法。我会将list
属性的类型更改为RLMResults
并执行rj001建议并在deleteObjects:
对象上调用RLMRealm
方法。
答案 2 :(得分:1)
正如Michael McGuire所说,+allObjects
现在返回一个RLMResults,它不响应-removeAllObjects
,但更重要的是,removeAllObjects
只删除链接到RLMArray中包含的对象,而不是对象本身。
因此,如果要删除对象(当然也会删除指向它们的链接),则应在RLMRealm实例上使用-deleteObjects:
。看起来这就是你想要做的事情。