Лучший способ сбросить настройки приложения в iOS4 с быстрым переключением приложений - PullRequest
1 голос
/ 10 декабря 2010

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

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

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 10 декабря 2010

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

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

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

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

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

В представлении вашего контроллера ControlDidLoad:

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

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

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

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

[[NSNotificationCenter defaultCenter] removeObserver:self];
...