Frage

Im Aufbau eine App, die ein Core Data-Modell verwenden. Ich ziemlich neu in Objective C und meine üblichen Entwurfsmuster gelten nicht wirklich auf Core Data und Objective C, zumindest kann ich nicht scheinen, Beispiele zu finden, das bestätigt, sie werden.

Ich war durch die Apple Developer Beispiele und verschiedene Quellen auf dem intertubes.

Es scheint, dass ich Core Data zu nutzen, müssen die managedObjectContext jedem meiner Viewcontrollers, die Viewcontroller die NSFetchedResultsControllerDelegate implementieren müssen passieren und dann jede der Methoden implementieren dafür ein holen und anschließend umzusetzen

NSFetchedResultsChangeInsert

NSFetchedResultsChangeDelete  NSFetchedResultsChangeMove  NSFetchedResultsChangeUpdate

Das fügt etwa 100 + Zeilen Code in jedem Viewcontroller, und es ist 90% der gleiche Code, den ich immer wieder schreiben. Außerdem habe ich alles laufen um und verfolgen seinen Speicherbedarf.

In anderen Sprachen würde ich ein Singleton-Modell von einigen Klassen erstellen, die Verfahren zur Aufrechterhaltung und Bereitstellung von Daten auf Anfrage gehalten, von jedem beliebigen Ort zur Verfügung. Es scheint, dass ich nicht diesen Ansatz in Objective C erfolgen kann, wenn ich wo eine statische Klasse zu bauen, die eine managedObjectContext nahm und kehrte mich, was ich brauchte, würde ich immer noch die managedObjectContext um zu jeder Ansicht passieren müssen und es wäre nicht asynchron, wie wenn ich delegieren Methoden implementieren, die nur aufgerufen wird, wenn ein Ergebnis bereit ist.

Ich hoffe, das macht Sinn, und dass jemand kann entweder bestätigen, dass es keine andere vernünftige Möglichkeit, es zu tun ist, oder diese in eine Richtung zeigen Sie mir helfen, für die Verpackung in einem guten Weg.

Danke:)

War es hilfreich?

Lösung

Core Data ist nicht annähernd so kompliziert, wie Sie beschreiben.

Im Allgemeinen ist eine iPhone App hat einen „Haupt“ verwaltete Objektkontext, die in der Regel von dem AppDelegate gehörte. Solange Sie die App Delegierten bekommen kann (Hinweis: [[UIApplication sharedApplication] delegate]) Sie haben Zugriff auf das verwaltete Objektkontext. Ich mag eine statische globale Variable definieren, einen Verweis auf meine AppDelegate zu halten, um das Leben leichter zu machen.

Es ist generell eine Eins-zu-Eins-Entsprechung zwischen NSFetchedResultsController Instanzen und UITableView Instanzen. Abgesehen von Tabellenansichten bevölkern, ist es äußerst selten, dass man eine NSFetchedResultsController müßte. Wenn Sie eine Reihe von ähnlichen Ansichten (zB eine Tab-Leiste, die Sie die gleichen Daten auf unterschiedliche Weise a la der iPod App können sehen), wäre es Ihnen gut beraten, eine einzige Basisklasse zu erstellen, die die NSFetchedResultsController konfiguriert und leiten Sie Ihre spezifischen View-Controller von dem.

Wenn Sie nun View-Controller erstellen, ein Objekt zu bearbeiten, es ist generell eine gute Idee, dass in einem separaten verwalteten Objektkontext zu tun. Wenn der Benutzer abbricht, verwerfen Sie einfach den Kontext und die Änderungen gehen weg. Auch hier brauchen Sie nicht wirklich eine NSFetchedResultsController für das, weil diese Ansichten nur mit einem einzigen Objekt betroffen sind.

Wenn Sie fertig bearbeiten, save: Sie den Objektkontext verwaltet. Die Objekte, die Ihre anderen verwalteten Objekt Kontexte verwalten sollte die NSFetchedResultsControllerDelegate Methoden implementieren synchron die Tabellen-Ansicht zu halten. Auch dies kann in einer Basisklasse implementiert werden, so dass Sie diese Funktionalität für ähnliche Ansicht-Controller verallgemeinern kann.

Andere Tipps

Müssen Sie unbedingt ein Coredata-Modell verwenden, oder würde etwas mit einem NSCoder (NSArchiver, NSKeyedArchiver, usw.) arbeiten? Ich habe festgestellt, dass Coredata für die meisten Anwendungen Overkill ist.

Auch könnten Sie erklären, warum Sie nicht einen Ansatz mit Singletons nehmen können? Ich habe ohne Probleme Singleton Fabriken in einer Reihe von Anwendungen eingesetzt. Es ist ziemlich einfach Klasse-Level-Methoden zu definieren, die auf einer gemeinsamen (Singleton) Instanz arbeiten.

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