Создание массива Realm.io

Как правильно создать экземпляр RLMObject с массивом других RLMObjects?

В документах ничего не упоминается, и мои первоначальные попытки (ничего не делать, предположим, что 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];

person Rog    schedule 24.07.2014    source источник


Ответы (2)


Использование метода 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]];

Этот код был взят непосредственно из модульного теста в царстве-какао.

Вы также можете сделать это в меньшем количестве строк кода:

NSArray *stringObjects = @[
    [[StringObject alloc] initWithObject:@[@"a"]],
    [[StringObject alloc] initWithObject:@[@"b"]]
];
[ArrayPropertyObject createInRealm:realm withObject:@[@"arrayObject", stringObjects, @[]]];
person jpsim    schedule 25.07.2014

Таким образом, ответ jpsim - это правильный способ добавления объектов, но проблема в моем коде (добавленном после его ответа) заключается в том, что свойства RLMArray создаются лениво из средства доступа при первой ссылке, а использование нотации подчеркивания ivar (_realmAnswers) позволяет избежать этой нагрузки.

Изменение моего кода с:

[_realmAnswers addObjectsFromArray: newArray];

to

[self.realmAnswers addObjectsFromArray: newArray];

Устраняет проблему.

person Rog    schedule 25.07.2014