0

用一组其他 RLMObject 实例化 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];
4

2 回答 2

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 中的单元测试

你也可以用更少的代码行来做到这一点:

NSArray *stringObjects = @[
    [[StringObject alloc] initWithObject:@[@"a"]],
    [[StringObject alloc] initWithObject:@[@"b"]]
];
[ArrayPropertyObject createInRealm:realm withObject:@[@"arrayObject", stringObjects, @[]]];
于 2014-07-25T00:00:40.740 回答
1

所以 jpsim 的答案是添加对象的正确方法,但我的代码中的问题(在他的回答之后添加)是 RLMArray 属性是在第一次引用时从访问器懒惰地创建的,并且使用下划线 ivar 表示法 ( _realmAnswers) 避免了该负载。

更改我的代码:

[_realmAnswers addObjectsFromArray: newArray];

[self.realmAnswers addObjectsFromArray: newArray];

修复问题。

于 2014-07-25T09:55:42.447 回答