Ios 在初始化方法完成之前调用UIViewController viewDidLoad
我有一个视图控制器,它初始化了另外两个视图控制器。一个控制器的视图没有显示,我跟踪了这个问题,直到将实例添加到superview时实例为零 这是代码。在初始化favoritesTableVC之前调用viewDidLoad。我可以通过在resultsTableVC和favoritesTableVC视图控制器的初始化方法中放置断点看到这一点Ios 在初始化方法完成之前调用UIViewController viewDidLoad,ios,uiviewcontroller,viewdidload,Ios,Uiviewcontroller,Viewdidload,我有一个视图控制器,它初始化了另外两个视图控制器。一个控制器的视图没有显示,我跟踪了这个问题,直到将实例添加到superview时实例为零 这是代码。在初始化favoritesTableVC之前调用viewDidLoad。我可以通过在resultsTableVC和favoritesTableVC视图控制器的初始化方法中放置断点看到这一点 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- (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返回之前:猜得好。我正在将此应用程序转换为通用应用程序。重新组织视图和视图控制器会让人头疼。我还不确定它为什么会这样做,但我想我现在可以解决这个问题了。谢谢