Использование applicationwillenterforeground для экрана с паролем
До iOS4 контроллер начального вида моего приложения проверял переменную параметров включения / выключения пароля в viewWillAppear и, если установлен, отображал экран модального кода доступа, который оставался там до тех пор, пока не был введен правильный пароль или не была нажата кнопка «Домой».
В iOS4, если мое приложение работает в фоновом режиме, я бы хотел, чтобы пользователь чувствовал себя комфортно, если бы данные, содержащиеся в приложении, не были легко доступны, если бы он передал свой телефон кому-то, кто мог бы им пользоваться.
Поскольку приложение могло вернуться к любому экрану (экран, на котором приложение было последним), я решил, что повсеместно буду использовать UIApplicationWillEnterForegroundNotification с локальными селекторами (дублирующимися методами enterPasscode), каждый из которых будет иметь правильный контроллер представления, который нужно выдвинуть на основе локальный экран, но должен быть лучший способ.
У меня может быть небольшое концептуальное недоразумение здесь. Может кто-нибудь предложить другой подход или подтолкнуть меня к следующему шагу. Могу ли я иметь это как общий метод, но все еще знать правильный локальный контроллер представления, чтобы выдвинуть?
Спасибо
EDIT / UPDATE:
Короткая версия: это работает, но, возможно, все еще может быть лучше (любая помощь приветствуется) ...
Я создал стандартный синглтон с контроллером представления.
PasscodeView.h, содержащий:
UIViewController *viewController;
@property (nonatomic, retain) UIViewController *viewController;
PasscodeView.m, содержащий:
@synthesize viewController;
Я положил это в AppDelegate:
-(void)applicationWillEnterForeground:(UIApplication*)application {
PasscodeView *passcodeView = [PasscodeView sharedDataManager];
UIViewController *currentController = [passcodeView viewController];
NSLog(@"%@", currentController); //testing
EnterPasscode *passcodeInput = [[EnterPasscode alloc] initWithNibName:@"Passcode" bundle:nil];
[currentController presentModalViewController:passcodeInput animated:NO];
[passcodeInput release];
}
и следующее во всех моих viewDidLoad, обновляя текущий контроллер представления, когда я заходил на каждый экран (только 2 строки, но все еще кажется, что есть лучший способ):
PasscodeView *passcodeView = [PasscodeView sharedSingleton];
passcodeView.viewController = [[self navigationController] visibleViewController];
Хотелось бы, чтобы был способ получить текущий контроллер вида из applicationWillEnterForeground, но я не смог его найти - любая помощь здесь по-прежнему ценится.
Для согласованности я изменил строку и добавил строку, чтобы панель навигации соответствовала остальной части приложения и включала заголовок.
UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:passcodeInput];
[currentController presentModalViewController: passcodeNavigationController animated:NO];