2016-09-09 10 views
0

Ich bin neu in Realm (Swift) und versuche, die beste Architektur zu übernehmen.So filtern Sie Daten nach Bildschirm

Nehmen wir an, ich habe einen Bildschirm 1, wo ich Objekt A, B und C laden, die ich in Realm-Datenbank speichern und anzeigen. Dann gehe ich zu Bildschirm 2, wo ich das gleiche Objekt lade, aber ich lade andere Objekte C, D und E. Wenn ich zurück zu Bildschirm 1 komme, will ich mich nicht mit A, B, C, D und finden E. Ich möchte A, B und C wie vorher finden, also muss ich filtern.

Ich dachte über 2 Strategien: Die erste ist, in Bildschirm 1 ein Array von Uuids meines Objekts und avec ein Ergebnisse, wo ich Objekt, das meine Tabelle von Uuids enthält, zu speichern, aber es funktioniert nicht, weil meine Ein Array von UUIDs ist nicht aktiv, daher werden meine Änderungen nicht dadurch ausgelöst, dass ich UUIDs aus dem UUID-Array hinzufüge oder entferne.

Die zweite Strategie besteht darin, eine vorübergehende Eigenschaft im Modell hinzuzufügen, um zu wissen, wo welche Objekte angezeigt werden sollen. Das Problem besteht darin, dass, wenn beide Bildschirme das Objekt C enthalten, die vorübergehende Eigenschaft auf dem letzten von mir besuchten Bildschirm aktualisiert wird und das Objekt auf dem vorherigen Bildschirm nicht sichtbar ist, da die vorübergehende Eigenschaft geändert wird.

Antwort

0

Wenn Sie bestimmte Realm-Objekte in einem bestimmten Ansichtscontroller explizit hängen müssen, können Sie diese spezifischen Objekte vom Objekt Results in ein Standard-Swift-Array kopieren, das bei Hinzufügen neuer Elemente nicht aktualisiert wird.

Diese Lösung ist jedoch ziemlich flüchtig. Wenn Sie diesen Controller zu einem späteren Zeitpunkt von Grund auf neu erstellen möchten, ist es möglicherweise die bessere Option, diesen Status tatsächlich in Realm zu belassen (und einen Filter wie den von Ihnen genannten zu verwenden).

Wenn das nicht hilft, müssen Sie möglicherweise Informationen darüber angeben, was Sie hier eigentlich machen wollen (Was bedeuten die Elemente A, B und C eigentlich?), Damit wir uns ein besseres Bild von dem Problem machen können du versuchst hier zu lösen. :)

+0

Ich tat das zu einer Zeit, aber das Objekt in einem Standard Swift-Array gehalten ist keine gute Lösung, sagen wir, dass ich ein Objekt, das in beiden Bildschirm 1 und Bildschirm 2 in Bildschirm 2 ist, wenn ich Comeback Um auf 1 zu scrollen, befindet sich das Objekt immer noch in meinem Array und wird freigegeben, so dass es abstürzt, dass das Objekt nicht mehr gültig ist. – Livio

+0

Es ist möglich, den Status eines Objekts zu überprüfen, indem man seine Eigenschaft 'object.invalidated' überprüft. Wenn Sie zu diesem Bildschirm zurückkehren, müssen Sie lediglich überprüfen, ob das Objekt noch gültig ist, und diesen Bildschirm vollständig abbrechen, wenn dies nicht der Fall ist. – TiM

+0

Oh danke ich wusste es nicht! Das ist wirklich großartig. Das bedeutet, dass Sie das Array eventuell mit Filter ({! $ 0.invalidated}) auf dem viewWillAppear von Screen A filtern können, damit es nicht abstürzt, wenn Sie zu diesem Bildschirm zurückkehren! – Livio