我正在尝试使用以下代码从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.
不确定如何继续,有人能指出我正确的方向吗?
答案 0 :(得分:3)
你过早这样做了。 viewDidLoad
表示视图控制器已一个视图(&#34;是什么单词&#34;加载&#34; 表示),但该视图不是界面的一部分。因此,没有任何东西可以呈现。
等到viewDidAppear:
。这意味着视图控制器的视图在界面中(&#34;出现&#34; 表示)。< / p>
请注意,viewDidAppear:
可以被多次调用,并且在呈现的视图控制器被解除时将被调用,从而给你一个恶性循环。使用某种Bool标志(属性)来防止这种情况。