我有一个视图控制器,初始化另外两个视图控制器。一个控制器的视图没有显示,当我将它添加到超级视图时,我将该问题跟踪为nil的实例。
这是代码。在initialTableVC初始化之前调用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];
}
以下是调用方法的顺序:
这是一个单线程,所以我不明白在init完成之前如何调用viewDidLoad。
答案 0 :(得分:1)
- [ResultsTableVC initWithController:andTableView:]可能引用了allResults.view。
这将强制allResults控制器加载其视图(当然这会导致viewDidLoad触发)。在您实际从initWithController返回之前,所有这些都是同步发生的:andTableView:
答案 1 :(得分:0)
我猜了,但你可以尝试一下:
favoritesTableVC = [[[FavoritesTableVC alloc] initWithFrame:CGRectMake(0, 10, SOME_HARD_CODED_INT, SOME_HARD_CODED_INT) andController:self] retain];
看看你是否得到了相同的结果
我的猜测是self.view
当时指的是nil
但这并不能解释为什么init
被召唤......但是没有伤害
(我没有测试过它)