正确的使用窗口

时间:2013-03-11 18:08:18

标签: objective-c cocoa

我正在开发我的第一个Cocoa Mac OS X程序,并想知道显示窗口的最佳方法。

我已将AppController / MainMenu.xib作为主要启动窗口,但未选中启动时可见的MainMenu.xib窗口。我这样做是因为在应用程序加载时我正在检查它们是否已登录。如果不是,我想显示Login.xib窗口而不是MainMenu.xib。登录后,我会打开MainMenu.xib窗口,然后在LoginController方法中关闭- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"app delegate");
    [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
    BOOL didAuth = NO;
    GTMOAuth2Authentication *auth = [GTMClasses authForService];
    if (auth) {
        didAuth = [GTMOAuth2WindowController authorizeFromKeychainForName:kKeychainName authentication:auth];
    }

    if (didAuth) {
        [[DataClass sharedInstance] setIsSignedIn:YES];
        NSLog(@"Already signed in %@", auth);
        NSLog(@"Window: %@", self.window);
        // SHOW MainMenu.xib here
    } else {
        NSLog(@"Not signed in %@", auth);
        loginController = [[LoginController alloc] initWithWindowNibName:@"Login" owner:self];
        [[loginController window] makeKeyAndOrderFront:self];
    }
}
  1. 我看到AppController的awakeFromNibapplicationDidFinishLoadingWithOptions之前被调用。将该代码放在我的awakeFromNib
  2. 中是否最好?
  3. 如果没有,从AppDelegate打开MainMenu.xib窗口的最佳方法是什么?
  4. 如果你有更好的方法,它会是什么?
  5. PS:AppController是NSObject的子类,因此我无权访问windowDidLoadwindowWillLoad

1 个答案:

答案 0 :(得分:1)

awakeFromNib是第一个被执行的方法。

您还可以使用allocinit方法。

您可以将登录验证码放在那里,没有任何问题。

您必须已经看过应用程序生命周期,如何以及何时加载了哪些方法。

enter image description here