2014-11-25 5 views
12

Ich frage über ein RLMArray mit objectsWhere und ich bekomme ein RLMResults, aber ich brauche ein RLMArray mit den Ergebnissen dieser Stelle in meinem Code.Konvertiere RLMResults in RLMArray

private var data: RLMArray? 

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

Antwort

11

RLMArray wurde in zwei Klassen aufgeteilt: RLMArray und RLMResults. RLMArray wird jetzt nur für To-Many-Eigenschaften auf RLMObject Klassen verwendet, während RLMResults für alle Abfrage- und Sortiermethoden verwendet wird. Dies wurde getan, um zu reflektieren, dass die zwei tatsächlich ziemlich verschiedene APIs hatten (zum Beispiel RLMResults nicht haben addObject:), und sie werden voraussichtlich weiter auseinander gehen, wie wir Änderungsbenachrichtigungen für Abfragen hinzufügen.

Die Migration sollte so einfach sein wie RLMArray mit RLMResults in allen Orten zu ersetzen, die der Compiler über beschwert.

mit diesem zu gehen, hat arraySortedByProperty:ascending: zu sortedResultsUsingProperty:ascending: umbenannt wurde, und addObjectsFromArray: hat addObjects: umbenannt worden, um die Tatsache widerzuspiegeln, dass Sie passieren jede zählbare Objekt, um es (wie NSArray, RLMArray oder RLMResults) .

Quelle: http://realm.io/news/realm-cocoa-0.87.0/#rlmresults

Hoffnung, die

+3

Für zukünftige Realm Neulinge wie ich, bitte diese Blog-Post mit diesen Änderungen aktualisieren. https://realm.io/news/tutorial-building-a-todo-app-with-realm/ Großer Rahmen, aber Dokumentation ist derzeit ein wenig fragmentiert. –

4
let datasheets = self.currentSubcategory!.datasheets!.objectsWhere("is_favourite = 1") 
let objects = Array(datasheets.generate()) 

self.data!.removeAllObjects() 
self.data!.addObjects(objects) 

Erstellen des Array der Ergebnisse genug ist erforderlich, weil die self.data!.removeAllObjects() Linie wird auch klar datasheets, da RLMResults sind Live-Aktualisierung, wie Sie Änderungen vornehmen zur Quelle.

6

Sie müssen Objekte hinzufügen von RLMResult zu RLMArray ...

@implementation RLMResults (RLMArrayConversion) 

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

@end