私はCocoaアプリケーションをプログラミングしていて、そのアプリケーションを一種のウィザードとして機能させたいと思っています。そのため、メインウィンドウには、ユーザーと対話し、ユーザーがウィザードのステージをステップスルーするときにサインインからデバイスアクティベーション画面に変更するカスタムビューがあります。現在、WizardViewControllerのawakeFromNibメソッドをオーバーライドしています。
- (void)awakeFromNib{
//If no redirect request save, add first view: ID Login
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *tokenRequest = [defaults objectForKey:@"redirectRequestToken"];
if (!tokenRequest){
SignInWithIDViewController *signInViewController = [[SignInWithIDViewController alloc] initWithNibName:@"SignInWithIDViewController" bundle:nil];
[wizardView addSubview:[signInViewController view]];
} else {
NSLog(@"Have already logged in.");
}
}
現状では、SignInIDViewControllerのinitWithNibNameは2回呼び出されます。1回は私が明示的に呼び出し、もう1回はビューがロードされたとき(おそらくloadViewを介して)です。ただし、単にinitを呼び出すと、initWithNib名は1回だけ呼び出されますが、間違ったxibファイルが(DeviceActivationViewControllerクラスの)ロードされます。signInViewControllerを2回初期化するべきではないため、何が間違っているのか理解できないようですが、表示するにはIBに適切なxibファイルが必要です。
現在このクラスにある、ユーザーインターフェイスIBActionではない他の唯一のメソッドは、生成されたinitWithNibNameメソッドと追加されたNSLogステートメントです。