Преобразование RLMResults в RLMArray
Я запрашиваю RLMArray с объектамиWhere, и я получаю RLMResults, но мне нужен RLMArray, а результаты - это мой код.
private var data: RLMArray?
self.data = self.currentSubcategory!.datasheets // is a RLMArray
self.data = self.data!.objectsWhere("is_favourite = 1")
Ответы
Ответ 1
RLMArray
был разделен на два класса: RLMArray
и RLMResults
. RLMArray
теперь используется только для многих свойств на RLMObject
, а RLMResults
используется для всех запросов и сортировки. Это было сделано для того, чтобы на самом деле имели довольно разные API (например, RLMResults
не имеют addObject:
), и theyre, как ожидается, будет расходиться дальше по мере добавления изменять уведомления для запросов.
Миграция для этого должна быть такой же простой, как замена RLMArray
с RLMResults
во всех местах, которые компилятор жалуется о.
Чтобы пойти с этим, arraySortedByProperty:ascending:
был переименован до sortedResultsUsingProperty:ascending:
и addObjectsFromArray:
был переименован в addObjects:
, чтобы отразить тот факт, что вы можете передать любой перечислимый объект (например, NSArray
, RLMArray
, или RLMResults
).
Источник: http://realm.io/news/realm-cocoa-0.87.0/#rlmresults
Надеюсь, что достаточно
Ответ 2
Вам нужно добавить объекты от RLMResult
до RLMArray
...
@implementation RLMResults (RLMArrayConversion)
- (RLMArray *)toArray {
RLMArray * array = [[RLMArray alloc] initWithObjectClassName:self.objectClassName];
[array addObjects:self];
return array;
}
@end
Ответ 3
let datasheets = self.currentSubcategory!.datasheets!.objectsWhere("is_favourite = 1")
let objects = Array(datasheets.generate())
self.data!.removeAllObjects()
self.data!.addObjects(objects)
Создание массива результатов требуется, потому что строка self.data!.removeAllObjects()
также очистит datasheets
, так как RLMResults
обновляется в реальном времени, когда вы вносите изменения в источник.