2014-11-25 3 views
12

Я запрашиваю RLMArray с объектамиWhere, и я получаю RLMResults, но мне нужен RLMArray, с результатами это точка в моем коде.Преобразование RLMResults в RLMArray

private var data: RLMArray? 

self.data = self.currentSubcategory!.datasheets // is a RLMArray 
self.data = self.data!.objectsWhere("is_favourite = 1") 

ответ

11

RLMArray был разделен на два класса: RLMArray и RLMResults. RLMArray теперь используется только для многих свойств на объектах RLMObject, а RLMResults используется для всех методов запросов и сортировки . Это было сделано с учетом того, что у двух фактически были довольно разные API-интерфейсы (например, RLMResults не имеют addObject:), и ожидается, что они будут расходиться по мере добавления уведомлений об изменениях для запросов.

Миграция для этого должно быть столь же простым, как замена RLMArray с RLMResults во всех местах, которые компилятор жалуется о.

Чтобы пойти с этим, arraySortedByProperty:ascending: был переименован в sortedResultsUsingProperty:ascending: и addObjectsFromArray: был переименован в addObjects:, чтобы отразить тот факт, что вы можете передать любой перечислимый объект к нему (например, NSArray, RLMArray или RLMResults) ,

Источник: http://realm.io/news/realm-cocoa-0.87.0/#rlmresults

Надеется, что это достаточно

+3

Для будущих новичков Realm, как я, пожалуйста, обновите этот блог с этими изменениями. https://realm.io/news/tutorial-building-a-todo-app-with-realm/ Отличная структура, но в настоящее время документация немного фрагментирована. –

4
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 являются живым обновлением по мере внесения изменений к источнику.

6

Вам нужно добавить объекты из RLMResult в RLMArray ...

@implementation RLMResults (RLMArrayConversion) 

- (RLMArray *)toArray { 
    RLMArray * array = [[RLMArray alloc] initWithObjectClassName:self.objectClassName]; 
    [array addObjects:self]; 
    return array; 
} 

@end