2010-12-09 1 views
1

Я сделал панель настроек для своего приложения с ползунком, который можно установить в «Стереть настройки при следующем запуске» (внутри основного приложения настроек iPhone). В делегате моего приложения я сделал это так, чтобы applicationWillEnterForeground проверил, был ли переключатель настроек установлен в настройках и очистил мои настройки: [NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]]; при необходимости.Лучший способ сбросить настройки приложения в iOS4 с быстрым переключением приложений

Мой вопрос: если viewDidLoad и viewDidAppear в моем контроллере просмотра не запускаются после изменения настроек из-за быстрого переключения приложений iOS 4 (просмотр по-прежнему загружается, когда я возвращаюсь из приложения настроек), как могу ли я предупредить эти контроллеры представлений о том, что настройки были сброшены, чтобы они могли повторно загружать все свои данные? Если бы только был способ вызвать [MainViewController initData] из делегата, но, к сожалению, это невозможно. Похоже, что если в контроллере просмотра нет действий, нет никакого способа узнать, были ли эти настройки сброшены.

Любая помощь будет высоко оценена.

ответ

1

Уведомления часто являются лучшим способом общения через контроллеры и т. Д.

Сначала разделите код инициализации на метод в вашем контроллере вида, который вызван вашим viewDidLoad/viewWillAppear. Для справки мы назовем это resetUser.

Затем создайте уведомление, которое стреляет из applicationWillEnterForeground, когда он видит, что этот переключатель был выброшен. Назовем это userRequestsReset.

[[NSNotificationCenter defaultCenter] postNotificationName:@"userRequestsReset" 
                                                    object:nil]; 

Наконец, в вашем ViewController слушать уведомления userRequestsReset и вызвать метод resetUser при получении уведомления.

В viewDidLoad вашей ViewController в:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(resetNoticeReceived:) 
                                             name:@"userRequestsReset" 
                                           object:nil]; 

Метод в вашем ViewController, который отвечает на уведомление:

- (void) resetNoticeReceived:(NSNotification *)notif { 
    [self resetUser]; 
} 

и удаление ViewController в качестве наблюдателя в viewDidUnload:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

Большое спасибо за ваш ответ, Мэтью. Я посмотрю, смогу ли я реализовать это сейчас и сообщить вам (извините, если я все еще немного новичок). – Jackson 2010-12-10 03:44:09