多くのコンテキストを提供しなかったため、パスコード ビュー コントローラーを提示しているため、起動時にこのエラーが発生していると思われます。
この警告を取り除くために、アプリ デリゲートをナビゲーション ルート ビュー コントローラーのデリゲートとして登録します。
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
((UINavigationController *)self.window.rootViewController).delegate = self;
return YES;
}
次に、モーダル ビュー コントローラーを次のように提示しnavigationController:didShowViewController:animated:
ますdispatch_once
。
- (void) navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
static dispatch_once_t once;
dispatch_once(&once, ^{
KVPasscodeViewController *passcodeController = [[KVPasscodeViewController alloc] init];
passcodeController.delegate = self;
UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:passcodeController];
[(UIViewController *)self.delegate presentViewController:passcodeNavigationController animated:YES completion:nil];
});
}
navigationController:didShowViewController:animated:
はルート ビュー コントローラーが表示された後に呼び出されるため、外観遷移の開始/終了への呼び出しのバランスが取れていないという警告はなくなりました。