我正在编写一个 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 被调用了两次,一次是由我显式调用,另一次是在加载视图时(可能是通过 loadView)。但是,如果我只是调用 init,那么 initWithNib 名称只会调用一次,但会加载错误的 xib 文件(属于 DeviceActivationViewController 类)。我似乎无法弄清楚我做错了什么,因为 signInViewController 不应该被初始化两次,但我需要在 IB 中显示正确的 xib 文件。
我目前在此类中唯一不是用户界面 IBAction 的方法是生成的 initWithNibName 方法加上添加的 NSLog 语句。