我试图使用以下代码来使用来自presentViewController的viewDidLoad代码:
@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.不知道怎么走,谁能给我指明正确的方向吗?
发布于 2015-10-25 16:52:19
你这么做太早了。viewDidLoad意味着视图控制器有一个视图(这就是"load“这个词的意思),但是该视图不是接口的一部分。因此,没有什么可以呈现的。
等viewDidAppear:再说。这意味着视图控制器的视图位于接口中(这就是“出现”一词的意思)。
但是,请注意,viewDidAppear:可以被多次调用,当呈现的视图控制器被解除时会被调用,这会给您一个恶性循环。使用某种类型的Bool标志(属性)来防止这种情况。
https://stackoverflow.com/questions/33332249
复制相似问题