Подтвердить что ты не робот

Преобразование 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")
4b9b3361

Ответ 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 обновляется в реальном времени, когда вы вносите изменения в источник.