viewDidLoad中的presentViewController

时间:2015-10-25 16:45:33

标签: objective-c cocoa

我正在尝试使用以下代码从viewDidLoad中使用presentViewController:

@implementation ViewController

- (void)showLogin{
    id animator = [[MyCustomAnimator alloc] init];
    NSViewController* vc = [[MyViewController alloc] initWithNibName:nil bundle:nil];

    [self presentViewController:vc animator:animator];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Presenting ViewController";
    [self showLogin];
}

@end

当我从IBAction按钮调用它时它工作正常但是以编程方式执行它我收到此错误:

 *** Assertion failure in -[ViewController presentViewController:animator:], /Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1404.12/Controllers/NSViewController.m:826

Failed to set (contentViewController) user defined inspected property on (NSWindow): presentViewController:animator:: View '<ViewController: 0x6000000c28b0>''s view is not in a window/view hierarchy.

不确定如何继续,有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

你过早这样做了。 viewDidLoad表示视图控制器一个视图(&#34;是什么单词&#34;加载&#34; 表示),但该视图不是界面的一部分。因此,没有任何东西可以呈现。

等到viewDidAppear:。这意味着视图控制器的视图在界面中(&#34;出现&#34; 表示)。< / p>

请注意,viewDidAppear:可以被多次调用,并且在呈现的视图控制器被解除时将被调用,从而给你一个恶性循环。使用某种Bool标志(属性)来防止这种情况。