Realm.io数组创建

时间:2014-07-24 17:27:40

标签: ios realm

使用其他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];

2 个答案:

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

解决问题。