2010-03-12 4 views
0

Я ищу, чтобы сохранить некоторые настройки, когда мое приложение выходит, и я немного запутался в двух разных версиях ниже. Я чувствую, что для лучшего соответствия шаблону MVC я должен использовать версию в viewController. Мне просто любопытно, как большинство людей, похоже, мало что делают в appDelegate, когда этот вызов будет использован?applicationWillTerminate, делегат или просмотр?

AppDelegate

-(void)applicationWillTerminate:(UIApplication *)application { 
    NSLog(@"_deli: applicationWillTerminate"); 
} 

ViewController

-(void)applicationWillTerminate:(NSNotification *)notification { 
    NSLog(@"_view: applicationWillTerminate"); 
} 

большое спасибо

EDIT_001:

К сожалению, я должен claifiy, вам также необходимо добавить (см ниже) до ViewController, чтобы сделать работу выше.

UIApplication *app = [UIApplication sharedApplication]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(applicationWillTerminate:) 
               name:UIApplicationWillTerminateNotification 
               object:app]; 

Гэри

ответ

1

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

Ключ предназначен для сохранения значений по умолчанию/предпочтений/состояний по мере их создания. Затем, когда приложение завершает работу по умолчанию, они автоматически сохраняются. Помните, что на iPhone вы никогда не знаете, когда приложение будет прервано или уйдет. Сохранить, когда вы идете, действительно единственный вариант.

Также, в приведенных примерах кода, как контроллер будет знать, когда приложение прекратит работу? IIRC, UIViewController не имеет метода applicationWillTerminate: и автоматически не получает определенное приложение, которое выйдет из сообщения. (Редактировать: Редактировать:В комментариях KennyTM указывает, что контроллер просмотра может регистрировать и прослушивать UIApplicationWillTerminateNotification). Вам нужно будет поместить эту функцию в -viewWillUnload. В противном случае вам нужно будет отслеживать контроллеры представлений из делегата приложения, если делегат отправит контроллеру активного представления сообщение, когда приложение прекратит работу.

+0

@TechZen: Контроллер вида может прослушивать уведомление 'UIApplicationWillTerminateNotification'. – kennytm

+0

Я обязательно посмотрю на сохранение «как и когда», мне особо не нужно экономить при выходе. – fuzzygoat

+0

@KennyTM - Хорошо, я отредактировал свой ответ, чтобы отразить это. Однако я не уверен, что это хороший дизайн. Я думаю, что это заставляет диспетчер взять на себя ответственность за модель. Конечно, всегда хорошо иметь эту стрелу в своем колчане в (я думаю) редких случаях, когда вам это нужно. Благодарю. – TechZen

2

Используйте любой из них имеет доступ к данным, который вы хотите сохранить. Поэтому, если ViewController может видеть данные, но AppDelegate не может, используйте это.

Смежные вопросы