Лучшие практики для обработки пользовательских настроек в приложении iPhone MVC? - PullRequest
3 голосов
/ 07 июня 2009

Я занимаюсь разработкой своего первого приложения для iPhone, и при реализации пользовательских настроек у меня есть несколько вопросов о том, как лучше всего это реализовать.

Предположим базовый шаблон MVC: MainView отображает данные, хранящиеся в объекте Model; MainViewController обрабатывает логику приложения.

Для параметров у меня есть OptionsView и OptionsViewController. RootViewController управляет обменом основного вида и параметров.

Прежде всего, как насчет данных опций? Хотел бы я сделать производный от NSOjbect класс для их хранения (OptionsModel)? Или может быть достаточно простого NSDictionary?

Во-вторых, кому принадлежат данные опций? Они являются префиксами приложений, но хранение их в AppDelegate кажется неправильным. MainViewController в основном заботится о параметрах, и OptionsViewController должен их редактировать, но эти парни не знают друг о друге, и, вероятно, не должны. RootViewController знает об обоих, поэтому он в хорошем состоянии для передачи опций между ними, но опять же, это кажется неправильным.

Наконец, MainViewController часто требуется для доступа к параметрам. Должен ли он каждый раз вызывать модель опций, чтобы получить какую-то опцию, или кэшировать свою собственную копию? Мне не нравится идея дополнительного извлечения данных опций, но наличие в MainViewController копий, которые могут быть не синхронизированы, также не очень привлекательно.

1 Ответ

8 голосов
/ 07 июня 2009

Посмотрите на NSUserDefaults . Это класс коллекции словарных стилей, разработанный для этой конкретной цели.

Вы сохраняете и восстанавливаете значения по умолчанию следующим образом:

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

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

NSUserDefaults автоматически позаботится о чтении и сериализации на диск.

Относительно вашего другого вопроса, это зависит от общей архитектуры вашего приложения. Отправка уведомлений, когда OptionsViewController закончен, звучит как разумный подход для меня. Однако вы также можете просто определить метод в вашем MainViewController или делегате приложения (т. Е. "-ReloadUserDefaults"), который вы можете вызывать из вашего OptionsViewController, когда он будет завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...