applicationWillTerminate, делегировать или просматривать? - PullRequest
0 голосов
/ 12 марта 2010

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

AppDelegate * * 1003

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

ViewController

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

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

EDIT_001:

Извините, я должен заявить, что вам также нужно добавить (см. Ниже) в ViewController, чтобы заставить работать выше.

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

* 1016 Гэри *

Ответы [ 2 ]

2 голосов
/ 12 марта 2010

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

1 голос
/ 12 марта 2010

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

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

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

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