3

Ich entwickle meine erste iPhone App, und während ich Benutzereinstellungen einfüge, habe ich ein paar Fragen, wie ich das am besten umsetzen kann.Best Practices für die Handhabung von Benutzereinstellungen in einer iPhone MVC App?

Nehmen Sie das grundlegende MVC-Muster an: MainView zeigt Daten an, die in einem Model-Objekt gespeichert sind; MainViewController behandelt die App-Logik.

Für die Optionen habe ich eine OptionsView und eine OptionsViewController. Ein RootViewController übernimmt das Austauschen der Ansichten Main und Options.

Vor allem was ist mit den Optionen Daten? Soll ich eine NSOjbect-abgeleitete Klasse erstellen, um sie zu speichern (ein OptionsModel)? Oder vielleicht würde ein einfaches NSDictionary ausreichen?

Zweitens, wer besitzt die Optionsdaten? Sie sind Anwendungspräferenzen, aber das Speichern in AppDelegate scheint falsch zu sein. MainViewController kümmert sich hauptsächlich um die Optionen, und OptionsViewController muss sie bearbeiten, aber diese Leute kennen einander nicht, noch sollten sie es wahrscheinlich tun. RootViewController kennt beide, also ist er in einer guten Position, um die Optionen zwischen ihnen zu übergeben, aber das scheint wieder falsch zu sein.

Schließlich muss MainViewController häufig auf die Optionen zugreifen. Sollte er jedes Mal das Optionsmodell aufrufen, um eine Option zu bekommen, oder seine eigene Kopie zwischenspeichern? Ich mag die Idee von zusätzlichen Overhead-Abruf-Optionsdaten nicht, aber die Tatsache, dass der MainViewController Kopien hat, die nicht mehr synchron sind, ist auch nicht sehr ansprechend.

+0

briankc, das ist sehr hilfreich, danke. Aber ich wundere mich immer noch über die Kommunikation von Optionen vom OptionsViewController, der sie bearbeiten wird, an den MainViewController, der wissen muss, wann sie sich geändert haben. OptionsViewController könnte sie über NSUserDefaults schreiben, dann eine NSNotification senden, die von MainViewController abgeholt wird, die dann die Optionen von NSUserDefaults lesen würde. Ist das vernünftig? – zpasternack

Antwort

8

Werfen Sie einen Blick auf NSUserDefaults. Es ist eine Kollektionssammlung für Wörterbücher, die speziell für diesen Zweck entwickelt wurde.

Sie speichern und Voreinstellungen abrufen wie so:

// Fetch a default 
BOOL deleteBackup = [[NSUserDefaults standardUserDefaults] boolForKey:@"DeleteBackup"]; 

// Save a default 
[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"DeleteBackup"]; 

NSUserDefaults wird automatisch von Lese kümmern aus und Serialisierung auf die Festplatte.

Bei Ihrer anderen Frage hängt es von der Gesamtarchitektur Ihrer App ab. Das Senden von Benachrichtigungen, wenn der OptionsViewController beendet ist, klingt für mich nach einer vernünftigen Herangehensweise. Sie können jedoch auch einfach eine Methode für Ihren MainViewController oder Ihren Anwendungsdelegaten definieren (zB "-reloadUserDefaults"), die Sie nach dem Beenden des OptionsViewControllers aufrufen können.

+0

Um dies weiter auszuführen, würden Sie auch ein Settings-Paket verwenden, das in NSUserDefaults verwendet (lädt) und auch Ihre Einstellungen in die Anwendung Einstellungen auf dem iPhone selbst installiert. Daher können die Benutzereinstellungen außerhalb der Anwendung geändert werden. Dies ist die bevorzugte Methode von Apple. –

+0

Es ist nicht unbedingt die bevorzugte Methode von Apple, Ihre Präferenzen an beiden Orten zu haben. Siehe http://tinyurl.com/cqyqja "Wenn Sie in Ihrer Anwendung dieselben Einstellungen vornehmen möchten, sind möglicherweise zu viele Bildschirme erforderlich, was für den Benutzer zu Verwirrung führen kann." –