Я пытаюсь представить контроллер представления (представление типа запроса пароля) каждый раз, когда мое приложение становится активным. Как только правильный пароль введен, он должен выскочить из стека. Представление пароля, которое я пытаюсь выдвинуть, не является исходным контроллером представления, поэтому у меня возникают проблемы с доступом к нему из applicationDidBecomeActive из AppDelegate.
Я также попытался выдвинуть представление пароля из ViewWillAppear моего MainViewController, но оно не вызывается, когда приложение становится активным; только при обновлении экрана.
Последние пару дней я исследовал подобные проблемы в SO, но до сих пор не понимаю правильный метод. Я слышал, что я не смогу продвинуть представление таким образом, потому что applicationDidBecomeActive может быть вызван до того, как Storyboard или NavigationController будут подключены / инициализированы / и т. Д.
Если бы кто-нибудь мог предоставить мне правильный способ выдвинуть / представить представление, или если бы было где-то еще, что было бы лучше сделать этот тип вещи, я был бы признателен.
Решено : Я просто удалил представление из раскадровки и вместо него использовал перо. Я использовал:
PasscodeUnlockVC *passcodeUnlock = [[PasscodeUnlockVC alloc] initWithNibName:@"PasscodeUnlockVC" bundle:[NSBundle mainBundle]];
[(UINavigationController *)self.window.rootViewController pushViewController:passcodeUnlock animated:NO];
Просмотр данных иерархии:
(gdb) po [[(id)UIApp keyWindow] recursiveDescription]
<UIWindow: 0x736a4b0; frame = (0 0; 320 480); layer = <UIWindowLayer: 0x7367b40>>
| <UILayoutContainerView: 0x76977a0; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x769de60>>
| | <UINavigationTransitionView: 0x7692110; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x769a8c0>>
| | | <UIViewControllerWrapperView: 0x73868d0; frame = (0 64; 320 416); autoresize = W+H; layer = <CALayer: 0x75510e0>>
| | | | <UIView: 0x76b93e0; frame = (0 0; 320 416); autoresize = W+H; layer = <CALayer: 0x7386850>>
| | <UINavigationBar: 0x73664b0; frame = (0 20; 320 44); clipsToBounds = YES; opaque = NO; autoresize = W; layer = <CALayer: 0x7366550>>
| | | <UINavigationBarBackground: 0x7360ea0; frame = (0 0; 320 44); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7366520>> - (null)
| | | <UINavigationItemView: 0x76b95e0; frame = (160 21; 0 0); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x76aa8e0>>
| | | <UINavigationItemButtonView: 0x7550650; frame = (5 7; 73 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7368b40>>
Current language: auto; currently objective-c
(gdb)