2016-04-14 20 views
1

In einer App, die VIPER-Architektur ausführt, wird empfohlen, Entitäten mit NSObject anstelle von NSManagedObject (Interactor) zu verwenden. Also wird ein NSManagedObject in einem PONSO 'transformiert', um damit zu arbeiten. Die Frage ist, wenn ich Attribute in einem PONSO ändern, wie kann ich Core Data aktualisieren?NSManagedObject in einer App mit VIPER-Architektur aktualisieren

Vielen Dank.

Antwort

0

Verwenden Sie einfach statt NSObject. Diese Empfehlung ist nicht wörtlich zu nehmen. In jedem Fall ist ein direkter Nachkomme von NSObject, so für alle praktischen Zwecke ist es genauso gut.

Als eine Nebenbemerkung ist VIPER eine allgemeine Architekturphilosophie, die wegen der übermäßigen Granularität ihrer Dateien und Funktionen nicht viel Zugkraft bekommen hat. Ich würde Ihnen empfehlen, das "Massive View Controller" -Problem zu reduzieren, indem Sie Ihren Code funktional um diese Controller herum strukturieren und VIPER als gute Quelle der Inspiration nutzen.

+0

Dies ist keine gute Idee, wie eine der Ideen hinter VIPER ist die Datenpersistenz-Implementierung vom Rest der Anwendung zu trennen. Wenn Sie jetzt anfangen, NSManagedObjects zu umgehen, ist Ihr gesamter Code von CoreData abhängig und Sie erhalten die von @Arkadi erwähnten Probleme auch – ShadowLightz

+0

Nur das @Arkadi ist falsch. Core Data ** ist ** Thread-sicher, und da es der _de facto_ Standard für die Persistenz auf iOS ist, verhindern meine vorgeschlagenen Lösungen nicht die Trennung von Bedenken, während die APIs von Apple für Einfachheit und Leistung genutzt werden. – Mundi

+0

Ich habe kürzlich CoreData ziemlich stark verwendet und ich kann Ihnen versichern, dass CoreData immer noch sporadisch abstürzt, wenn es auf dem falschen Thread verwendet wird; mit sporadisch meine ich Abstürze in der Größenordnung von 1 in einer Million Operationen, aber sie auftreten. Daher müssen Sie jede Operation in synchronisierte Ausführungsblöcke einbinden. Obwohl CoreData großartig ist, könnte eine andere db-Lösung angebracht sein; insbesondere wenn eine Synchronisierung mit Android oder Windows erforderlich ist. – ShadowLightz

0

Dies ist eine sehr schlechte Idee. Wenn Sie in Ihrer App asynchrone Codeelemente verwenden und die meisten von uns wissen, dass nsmanagedoject nicht threadsicher ist. Sie müssen Ihren Ansatz überdenken. Wenn Sie eine Core Data Backed App verwenden, können Sie die ManagedObjectID in der Ponso speichern und verwenden, um die Datenbank zu aktualisieren, während eine Aktualisierung nach der Datenbankänderung ausgelöst wird