Usando applicationwillenterforeground para uma tela de senha

Antes do iOS4, o controlador de visualização inicial do meu aplicativo verificava uma variável de configurações de ativação / desativação de senha em viewWillAppear e, se ativado, apresentava uma tela de senha modal que permaneceria lá até que a senha correta fosse inserida ou o botão Início fosse pressionado.

Com o iOS4, se meu aplicativo estiver em segundo plano, eu gostaria que o usuário se sentisse à vontade para que os dados contidos no aplicativo não fossem facilmente acessíveis se eles entregassem seu telefone a alguém para usá-lo.

Como o aplicativo pode retornar a qualquer tela (a última tela em que o aplicativo estava), imaginei que usaria o UIApplicationWillEnterForegroundNotification em todo o lugar com seletores locais (métodos enterPasscode duplicados), cada um com o controlador de exibição correto para empurrar com base no tela local, mas tem que haver uma maneira melhor.

Eu posso estar tendo um leve equívoco conceitual aqui. Alguém pode sugerir outra abordagem ou me levar para a próxima etapa. Posso ter isso como um método compartilhado, mas ainda sei o controlador de exibição local correto a ser enviado?

obrigado

EDIT / UPDATE:

Versão curta: Funciona, mas pode ainda haver uma maneira melhor (qualquer ajuda apreciada) ...

Eu criei um singleton padrão com um controlador de exibição.

PasscodeView.h contendo:

UIViewController *viewController;
@property (nonatomic, retain) UIViewController *viewController;

PasscodeView.m contendo:

@synthesize viewController;

Coloquei isso no 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];
}

e o seguinte em todo o meu viewDidLoad, atualizando o controlador de exibição atual conforme eu passava em cada tela (apenas 2 linhas, mas ainda parece que há uma maneira melhor):

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

Eu gostaria que houvesse uma maneira de obter o controlador de exibição atual do applicationWillEnterForeground, mas não consegui encontrá-lo - qualquer ajuda aqui ainda é apreciada.

Para manter a consistência, alterei uma linha e adicionei uma linha para obter uma barra de navegação correspondente ao restante do aplicativo e incluir um título.

UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:passcodeInput];
[currentController presentModalViewController: passcodeNavigationController animated:NO];

questionAnswers(2)

yourAnswerToTheQuestion