Использование applicationwillenterforeground для экрана с паролем

До iOS4 начальный контроллер представления моего приложения проверял переменную настроек включения / выключения пароля в viewWillAppear и, если он был включен, отображал модальный экран кода доступа, который оставался бы там до тех пор, пока не будет введен правильный пароль или не будет нажата кнопка «Домой».

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

Поскольку приложение могло вернуться к любому экрану (экран, на котором приложение было последним), я решил, что буду использовать UIApplicationWillEnterForegroundNotification повсюду с локальными селекторами (дублирующие методы enterPasscode), каждый из которых имеет правильный контроллер представления для нажатия на основе локального экрана, но должен быть способ лучше.

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

Спасибо

РЕДАКТИРОВАТЬ / ОБНОВЛЕНИЕ:

Краткая версия: Это работает, но, возможно, все еще может быть лучший способ (любая помощь приветствуется) ...

Я создал стандартный синглтон с помощью контроллера представления.

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, обновляя текущий контроллер представления, когда я заходил на каждый экран (только две строки, но все же кажется, что есть лучший способ):

PasscodeView *passcodeView = [PasscodeView sharedSingleton];
passcodeView.viewController = [[self navigationController] visibleViewController];

Я хотел бы иметь способ получить текущий контроллер представления из applicationWillEnterForeground, но я не смог его найти - любая помощь здесь все еще приветствуется.

Для единообразия я изменил строку и добавил строку, чтобы панель навигации соответствовала остальной части приложения и включала заголовок.

UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:passcodeInput];
[currentController presentModalViewController: passcodeNavigationController animated:NO];
6
задан 19 revs 10 August 2010 в 18:06
поделиться