2009-02-05 9 views
6

Ich habe eine App, mit der der Benutzer eine Auflistung von Schedule-Objekten anzeigen, bearbeiten und verwalten kann. Verschiedene Teile der App benötigen Zugriff auf diese Daten. Ich habe experimentiert, die Sammlung zu einem Singleton zu machen, aber ich fand das nicht sehr sauber.Wo legen Sie globale Anwendungsdaten in eine iPhone App?

I Speichern der globalen Daten in der AppDelegate Klasse vor kurzem geändert und mit:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.myGlobalData doSomething]; 

, die die Notwendigkeit für meine globalen Daten eliminiert ein Singleton zu sein, aber es ist wirklich nur die Vorteile der UIApplication Singletons nehmen.

Es gibt wirklich nicht nur einen primären View-Controller, wo es sinnvoll ist, es in meinem Fall zu speichern. Ich habe mich also gefragt, mit welchen verschiedenen Strategien die Menschen damit umgehen.

Antwort

6

Wenn Sie ein zentrales Datenmodell haben, auf das mehrere Controller zugreifen können, ist die Verwendung eines Singleton zur Verwaltung der Daten kein Problem - ein "sharedManager" ist genau das, was das Szenario erfordert. Dies ist im Wesentlichen das, was Apple mit seiner Adressbuch-API zum Manipulieren von Kontakten macht. Sie verwenden eine C-style-API, beziehen aber einen Verweis auf die Datenbank des freigegebenen Adressbuchs ein und verwenden diese in zukünftigen Aufrufen.

Die Verwendung der App Delegate funktioniert auch, aber wie Sie bemerken, ist es wirklich das Gleiche. Sie bezeichnen den App-Delegaten Singleton als Besitzer des Datenmodells, was ebenfalls OK ist.

NSUserDefaults kann auf diese Weise missbraucht werden, aber das ist wirklich nicht sein Zweck. Abgesehen davon, dass es irgendwie hässlich ist, legt es auch Beschränkungen für die Art von Daten fest, die Sie speichern können. Ihr eigenes Modell kann beliebige Daten speichern, aber NSUserDefaults ist nicht ganz so flexibel.

Die Verwendung von SQLite oder einer Eigenschaftsliste oder was auch immer, um die Daten in einer Datei zu speichern, ist wirklich orthogonal zur Frage, wie man sie verwaltet. Aus Ihrer Beschreibung klingt ein Singleton-Ansatz vernünftig, und dieser Singleton kann auf jede Art und Weise in Dateien schreiben, die für die Daten, mit denen Sie arbeiten, sinnvoll sind.

+0

Wenn Sie versucht sind, dies zu downvoten (wie jemand gerade getan hat), schauen Sie sich bitte das Datum an, an dem es geschrieben wurde. Zu dieser Zeit war iPhone OS 2.2 (nicht iOS) aktuell und Core Data war auf iPhones nicht verfügbar. –

4

Viele Menschen speichern alles im AppDelegate und greifen auf die Daten über [[UIApplication sharedApplication] Delegat] zu.

Wenn die Daten beibehalten werden sollen, können Sie auch das NSUserDefaults-Singleton verwenden.

Wenn die Daten groß sind, brauchen Sie vielleicht SQLite.

Dies ist für "globale" Daten, wie Sie gefragt haben.

Wenn Ihre View-Controller in einer Baumstruktur organisiert sind, könnten Sie die erforderlichen Daten vom übergeordneten UIViewController an den untergeordneten UIViewController übergeben.

Verwandte Themen