Frage

In meinem Projekt habe ich einige Objekte haben, dass ich von einem Server zeigen, lässt sie Foo nennen. Wenn ich meine Foo Futter bekommen, ich habe sie in einem angerufenen RemoteFoo Unterklasse NSMutableDictionary analysieren, und übergeben diese RemoteFoo alle Anzeigedaten rund um die App-Objekte.

Wenn der Benutzer landet will ein RemoteFoo zum Download, ich erstelle dann eine Kern-Daten NSManagedObject Entität namens Foo und instanziiert es die Werte aus dem RemoteFoo verwenden. All dies funktioniert.

Das Problem, das ich habe ist, dass wenn ich eine Methode will auf einem RemoteFoo und Foo zu laufen, ich habe es zu duplizieren sowohl RemoteFoo.m und Foo.m. Auch meine app, wenn voll von doppelter init ist wie:

- (id)initWithFoo:(Foo *)foo;
- (id)initWithRemoteFoo:(RemoteFoo *)foo;

Wie kann ich die gesamte Code-Doppelarbeit vermeiden, während immer noch den temporären Fern RemoteFoo von den Kerndaten Foo Einheiten zu trennen, die die Foo der Benutzer darstellen hat lokal gespeichert?

War es hilfreich?

Lösung

Sie können nur speichern alle RemoteFoo ist als Foo und Arbeit mit diesen. Wenn Sie ein anderes Verhalten benötigen, könnten Sie ein Attribut auf Foo haben die angibt, ob es remote ist oder nicht.

Andere Tipps

Haben Sie daran gedacht, so etwas wie eine Klasse Cluster mit -

http: // seanmurph.com/weblog/make-your-own-abstract-factory-class-cluster-in-objective-c/

    --------- Foo --------          NSManagedObject
    |                    |                 |
RemoteFoo             LocalFoo ------ CoreDataFoo 

Ändern Sie Ihre Core Data-Modell wie folgt. Verwenden Sie eine Foo-Instanz und fügen Sie eine Boolesche Attribut isRemote (oder so ähnlich), dass Sie standardmäßig auf NO gesetzt. Wenn Sie Ihre Remote-Objekte herunterladen, instanziiert diejenigen, die als Foo Objekte verwaltet und setzen ihre isRemote Attribut auf yes.

Auf diese Weise müssen Sie nur mit einer Instanz in Ihrer Anwendung behandeln, unter Beibehaltung der Fähigkeit, klar zwischen lokalen und entfernten Foo Objekte zu unterscheiden. Wenn Ihre App dies erlaubt können Sie sogar das isRemote Attribut als transiente erklären, so dass es nie auf der Festplatte gespeichert werden, nur im Speicher. Wenn Sie keine Sorge tun, um diese Informationen zu bestehen, dann kann dies der beste Weg zu gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top