2016-08-14 4 views
0

Ich verwende Realm als meine Speicherschicht in einer iOS App. App hat eine Tabellenansicht, in der jede Zelle eine von zwei Arten sein kann. Die zwei Typen haben einige Felder gemeinsam, aber mehrere Felder sind unterschiedlich.Realm als Datenquelle für TableView - wie man verschiedene Objekte in der Datenquelle speichert

Der Client führt eine REST-API mit einem Suchbegriff aus, und der Server gibt eine priorisierte Liste von Objekten zurück, die zu den beiden Typen gehören. Der Designer möchte nicht, dass das Objekt als zwei separate Gruppen angezeigt wird, sondern basierend auf der vom Server festgelegten Priorität zusammengemischt wird.

Ich möchte die Ergebnisse in der Realm-DB speichern. Da Realm RLMArray nicht erlaubt, mir Objekte von 2 Typen zu speichern, das in Realm zu modellieren, scheint es, dass ich drei RLMArray Objekte haben muß 1. RLMArray von Objekten des Typs 1 2. RLMArray von Objekten des Typs 2 von Objekten eines 3. Typs, die zwei Felder haben: Objekttyp und ObjectID (dies ist die Version, die die vermengte Version speichert).

Gibt es einen anderen Ansatz, der die Duplizierung reduziert?

Antwort

1

Die 3. Art könnte ein Wrapper-Objekt mit direkten Beziehungen zu den beiden anderen Typen:

@interface Obj1 : RLMObject 
@end 

@interface Obj2 : RLMObject 
@end 

@interface Wrapper : RLMObject 
@property Obj1 *o1; 
@property Obj2 *o2; 
@end 

Wenn die Objekte empfangen Sie würden eine Instanz des Wrapper für jeden erstellen und nur die passende Verbindung gesetzt. Dann könnte Ihr TableView einfach prüfen, welcher Link gültig ist und den Kontext des verknüpften Objekts anzeigen.

Abhängig von Ihrem Anwendungsfall würden Sie nicht einmal RLMArray s für die zwei Hauptobjekttypen benötigen, da die Reihenfolge von der Liste der Wrapper-Objekte verwaltet wird.

Verwandte Themen