使用其他RLMObjects数组实例化RLMObject的正确方法是什么?
文档没有提到任何内容和我最初的尝试(什么都不做,假设Realm做了正确的事情并创建了一个空数组,并指定当我设置我的第一个关系时似乎不起作用。
这是我的代码:
[[RLMRealm defaultRealm] beginWriteTransaction];
[_realmAnswers removeAllObjects];
NSMutableArray* newArray = [NSMutableArray arrayWithCapacity:answers.count];
for (NSString* answerString in answers){
OFEAnswerEntry* newAnswer = [[OFEAnswerEntry alloc] init];
newAnswer.answerString = answerString;
[newArray addObject:newAnswer];
}
[_realmAnswers addObjectsFromArray: newArray];
[[RLMRealm defaultRealm] commitWriteTransaction];
答案 0 :(得分:3)
在addObjectsFromArray:
上使用RLMArray
方法:
ArrayPropertyObject *obj = [ArrayPropertyObject createInRealm:realm withObject:@[@"arrayObject", @[], @[]]];
StringObject *child1 = [StringObject createInRealm:realm withObject:@[@"a"]];
StringObject *child2 = [[StringObject alloc] init];
child2.stringCol = @"b";
[obj.array addObjectsFromArray:@[child2, child1]];
此代码直接取自realm-cocoa中的unit test。
您也可以在更少的代码行中执行此操作:
NSArray *stringObjects = @[
[[StringObject alloc] initWithObject:@[@"a"]],
[[StringObject alloc] initWithObject:@[@"b"]]
];
[ArrayPropertyObject createInRealm:realm withObject:@[@"arrayObject", stringObjects, @[]]];
答案 1 :(得分:1)
所以jpsim的答案是添加对象的正确方法,但我的代码中的问题(自答案后添加)是RLMArray属性是在第一次引用时从访问者懒洋洋地创建并使用下划线ivar表示法(_realmAnswers
)避免这种负担。
更改我的代码:
[_realmAnswers addObjectsFromArray: newArray];
到
[self.realmAnswers addObjectsFromArray: newArray];
解决问题。