viewDidLoad 和 ViewDidAppear 未被调用

viewDidLoad and ViewDidAppear not being called

我有一个 UIViewController 是从 xib 文件创建的。

我是这样初始化的:

 _sharedSingleton = [[SlipChangesViewController alloc] init];
            [[NSBundle mainBundle] loadNibNamed:@"SlipChangesViewController" owner:_sharedSingleton options:nil];

我将 UIViewController 的视图添加到另一个 UIViewController 的子视图中:

[self.view addSubview:slipChangesVC.view];

现在奇怪的是,视图成功添加到子视图,但是由于某些原因viewDidLoadvieWillAppear都没有被调用。但是,它成功调用了创建共享单例的方法和 init 方法。

我已经仔细检查以确保:

我检查了 Whosebug 上的各种线程并尝试了那里的建议但没有成功。例如。调用 [slipChangesVC view]

有谁知道为什么这两个方法不会被调用?

这不是添加子视图控制器的正确方法。通过这种方式,视图所有者获得更改。视图与其视图控制器分离,视图控制器停止接收 viewDidLoad 和其他视图方法。

如果你想让它工作,请查看已经回答的问题: add UIViewController in subview

您正在现有视图之上添加 SlipChangesViewController 视图。在这种情况下,viewDidLoad 和 viewWillAppear 从未调用过。您需要为此添加一个 ViewController

试试这个

- (void)addChildViewC:(UIViewController *)childViewC
{
    [self addChildViewController:childViewC];
    childViewC.view.frame = self.view.bounds;
    [self.view addSubview:childViewC.view];
    [childViewC didMoveToParentViewController:self];
}

我永远不会让视图控制器成为单例。这不是单身人士。它被创造、毁灭、再创造、再毁灭。

我认为 viewDidLoad 在视图控制器的生命周期中只被调用 一次。所以让你成为单身人士可能会导致各种各样的问题。