2015-03-04 18 views
5

Der Realm doc sagt die RLMResults sind lecken NSArray. Ich habe einige Ergebnisse von der Datenbank zurückgegeben und ich möchte es in einem anderen RLMResults zusammenführen. Aber es scheint, es ist unveränderlich, wie man eine RLMResults Objekte von einem anderen RLMResults hinzufügen? oder veränderlich machen? oder konvertieren Sie es in NSArray?Wie macht man RLMResults veränderbar?

+0

Versuchen Sie, Ihre Frage zu beantworten, und fangen wirklich an, dieses API-Design zu hassen. Warum müssen Sie die RLM-Ergebnisse kombinieren? –

+0

@MillieSmith Ich muss RLMResults mit RLMResults kombinieren. –

+0

Kannst du mehr darüber erzählen, was du zu tun versuchst? Ein kleines Codebeispiel wäre gut. Dies könnte etwas sein, das wir basierend auf den Anwendungsfällen betrachten könnten. – yoshyosh

Antwort

3

Momentan müssen Sie das manuell erledigen. Sie könnten ein RLMArray erstellen, indem Sie Ihre beiden Ergebnisse verketten.

Wir diskutieren jedoch eine Union/Merge-Methode weiter unten auf der Roadmap für RLMObjects des gleichen Typs.

JedesBit Sie teilen können uns die Anwendungsfälle helfen, zu verstehen und möglicherweise das api Design

So lange auswirken, da sie vom gleichen Typ sind, ist hier ein allgemeines Beispiel

let currentTask = Task.objectsWhere("name = %@", "First task").firstObject() as Task 
let currentRecords = currentTask.records 
let arrayOfRecords = RLMArray(objectClassName: "Record") 

arrayOfRecords.addObjects(currentRecords) 

let futureTask = Task.objectsWhere("name = %@", "Future task").firstObject() as Task 
let futureRecords = futureTask.records 

arrayOfRecords.addObjects(futureRecords) 
+0

Können Sie Code bereitstellen, um ein RLMResults-Objekt in ein RLMArray-Objekt zu konvertieren? Ich kann mir nicht vorstellen, wie das geht, und es wäre im Wesentlichen die Antwort auf die Frage von OP. Es erscheint mir auch seltsam, dass RLMArray nicht instanziiert werden kann, da Sie Objekte beliebig zu einer Instanz hinzufügen können. Auch dies ist ein wenig außerhalb der Reichweite der Frage, aber in RLMResults, was ist die Verwendung von FirstObject und LastObject? Ich finde keine Möglichkeit, andere Gegenstände von denen zu bekommen. Dies sind wahrscheinlich naive Fragen - ich bin neu in der Bibliothek. –

+0

Kein Problem, ich habe mein Beispiel bearbeitet, um dies einzuschließen. Es kann mit einem Typ instanziiert werden. Wie hast du versucht es zu instanziieren? Nicht sicher, was die letzte Frage ist, aber ich benutze FirstObject viel wie Sie im obigen Beispiel sehen, da Task.ObjectsWhere ... eine RLMResults zurückgibt, wenn ich nur nach einer Aufgabe suche. lastObject wird möglicherweise verwendet, wenn Sie anhand Ihrer Suchkriterien wissen möchten, welche Aufgabe zuletzt hinzugefügt wurde – yoshyosh

1

ich fand heraus, Lösung von duemunk: https://github.com/realm/realm-cocoa/issues/1046

Grundsätzlich konvertiere ich die RLMResults auf [RLMObject]: func toArray<T>(ofType: T.Type) -> [T] { var array = [T]() for result in self { if let result = result as? T { array.append(result) } } return array }

let tracks = Track.allObjects().toArray(Track.self) // tracks is of type [Track]