Ios 在初始化方法完成之前调用UIViewController viewDidLoad

Ios 在初始化方法完成之前调用UIViewController viewDidLoad,ios,uiviewcontroller,viewdidload,Ios,Uiviewcontroller,Viewdidload,我有一个视图控制器,它初始化了另外两个视图控制器。一个控制器的视图没有显示,我跟踪了这个问题,直到将实例添加到superview时实例为零 这是代码。在初始化favoritesTableVC之前调用viewDidLoad。我可以通过在resultsTableVC和favoritesTableVC视图控制器的初始化方法中放置断点看到这一点 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

我有一个视图控制器,它初始化了另外两个视图控制器。一个控制器的视图没有显示,我跟踪了这个问题,直到将实例添加到superview时实例为零

这是代码。在初始化favoritesTableVC之前调用viewDidLoad。我可以通过在resultsTableVC和favoritesTableVC视图控制器的初始化方法中放置断点看到这一点

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        resultsTableVC = [[[ResultsTableVC alloc] initWithController:self andTableView:nil] retain];
        favoritesTableVC = [[[FavoritesTableVC alloc] initWithFrame:CGRectMake(0, 10, self.view.frame.size.width, defaultFavoritesTableHeight) andController:self] retain];        
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view addSubview:resultsTableVC.view];
    [resultsTableVC release];
    [self.view addSubview:favoritesTableVC.view];
    [favoritesTableVC release];    
}
以下是调用方法的顺序:

  • allResults初始化
  • resultsTableVC初始化
  • allResults viewDidLoad
    • addSubview allResultsVC
    • 添加子视图收藏夹结果SVC
  • favoritesResultsVC初始化

这是一个单线程,所以我不明白如何在init完成之前调用viewDidLoad。

我猜一下,但您能试试这个吗:

favoritesTableVC = [[[FavoritesTableVC alloc] initWithFrame:CGRectMake(0, 10, SOME_HARD_CODED_INT, SOME_HARD_CODED_INT) andController:self] retain]; 
然后看看是否得到相同的结果。
我的猜测是,
self.view
当时指向了
nil

但这并不能解释为什么在。。。但是尝试没有坏处。

(我还没有测试过)

-[ResultsTableVC initWithController:和TableView:]可能正在引用allResults.view


这将强制allResults控制器加载其视图(这当然会导致viewDidLoad触发)。所有这些都是同步发生的,在您实际从initWithController:andTableView返回之前:

猜得好。我正在将此应用程序转换为通用应用程序。重新组织视图和视图控制器会让人头疼。我还不确定它为什么会这样做,但我想我现在可以解决这个问题了。谢谢