Лучшие практики для обработки пользовательских настроек в приложении iPhone MVC?
Я разрабатываю свое первое приложение для iPhone, и при реализации пользовательских настроек у меня есть несколько вопросов о том, как лучше всего это реализовать.
Предположим базовый шаблон MVC: MainView отображает данные, хранящиеся в объекте Model; MainViewController обрабатывает логику приложения.
Для опций у меня есть OptionsView и OptionsViewController. RootViewController управляет обменом основного вида и параметров.
Прежде всего, как насчет данных опций? Хотел бы я сделать производный от NSOjbect класс для их хранения (OptionsModel)? Или может быть достаточно простого NSDictionary?
Во-вторых, кому принадлежат данные опционов? Они являются префиксами приложений, но хранение их в AppDelegate кажется неправильным. MainViewController в основном заботится о параметрах, и OptionsViewController должен их редактировать, но эти парни не знают друг о друге, и, вероятно, не должны. RootViewController знает об обоих, поэтому он в хорошем положении, чтобы передавать параметры между ними, но опять же, это кажется неправильным.
Наконец, MainViewController часто требуется для доступа к параметрам. Должен ли он каждый раз вызывать модель опций, чтобы получить какую-то опцию, или кэшировать свою собственную копию? Мне не нравится идея дополнительного извлечения данных опций, но наличие MainViewController с копиями, которые могут быть не синхронизированы, также не очень привлекательно.
1 ответ
Посмотрите на NSUserDefaults. Это класс коллекции словарных стилей, разработанный для этой конкретной цели.
Вы сохраняете и восстанавливаете значения по умолчанию следующим образом:
// Fetch a default
BOOL deleteBackup = [[NSUserDefaults standardUserDefaults] boolForKey:@"DeleteBackup"];
// Save a default
[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"DeleteBackup"];
NSUserDefaults автоматически позаботится о чтении и сериализации на диск.
Что касается вашего другого вопроса, это зависит от общей архитектуры вашего приложения. Отправка уведомлений, когда OptionsViewController закончен, звучит как разумный подход для меня. Однако вы также можете просто определить метод в вашем MainViewController или делегате приложения (т. Е. "-ReloadUserDefaults"), который вы можете вызывать из вашего OptionsViewController, когда он будет завершен.