2015-03-04 12 views
5

Il documento Reame dice che il RLMResults è leccato NSArray. Ho alcuni risultati restituiti dal database e voglio unirlo in un altro RLMResults. Ma sembra immutabile, Come fare un RLMResults aggiungere oggetti da un altro RLMResults? o renderlo mutabile? o convertirlo in NSArray?Come rendere modificabili gli RLMResults?

+0

Cercando di rispondere alla tua domanda, e davvero iniziando a odiare questo disegno haha ​​API. Perché hai bisogno di combinare i RLMResults? –

+0

@MillieSmith Devo combinare RLMResults con RLMResults. –

+0

Puoi condividere di più su ciò che stai cercando di fare? Un piccolo esempio di codice sarebbe buono. Questo potrebbe essere qualcosa che potremmo considerare basato sui casi d'uso – yoshyosh

risposta

3

Attualmente questo è qualcosa che dovresti fare manualmente. È possibile creare un RLMArray concatenando i due risultati.

Stiamo discutendo un metodo unione/unione più avanti sulla tabella di marcia per RLMObjects dello stesso tipo.

Qualsiasi bit è possibile condividere ci aiuterà a comprendere i casi d'uso e potenzialmente impatto il design api

Finché sono dello stesso tipo, ecco un esempio generico

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

Puoi fornire un codice per convertire un oggetto RLMResults in un oggetto RLMArray? Non riesco a capire come farlo, e sarebbe essenzialmente la risposta alla domanda dell'OP. Mi sembra strano anche che RLMArray non possa essere istanziato, dato che puoi arbitrariamente aggiungere oggetti a un'istanza. Inoltre, questo è un po 'fuori dalla portata della domanda, ma in RLMResults, qual è l'utilità di avere firstObject e lastObject? Non riesco a trovare un modo per ottenere altri oggetti da quelli. Queste sono probabilmente domande ingenue - Sono nuovo nella biblioteca. –

+0

Nessun problema, ho modificato il mio esempio per includerlo. Può essere istanziato con un tipo. Come stavi cercando di istanziarlo? Non sono sicuro di quale sia l'ultima domanda, ma io uso firstObject molto simile a quanto visto nell'esempio precedente poiché Task.objectsWhere ... restituirà un RLMResults, quando cerco solo un'attività. lastObject può essere utilizzato quando si desidera conoscere l'ultima attività aggiunta in base ai criteri di ricerca – yoshyosh

1

ho scoperto la soluzione da duemunk: https://github.com/realm/realm-cocoa/issues/1046

Fondamentalmente ho convertire il RLMResults per [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]

Problemi correlati