[英]UIViewController viewDidLoad called before init method is complete
我有一個視圖控制器,可以初始化其他兩個視圖控制器。 沒有顯示一個控制器的視圖,並且我將問題跟蹤到實例添加到超級視圖時為零。
這是代碼。 在初始化favoriteTableVC之前,將調用viewDidLoad。 通過在resultTableVC和favoriteTableVC視圖控制器的初始化方法中放置斷點,可以看到這一點。
- (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];
}
方法被調用的順序如下:
這是一個單線程,所以我不了解在初始化完成之前如何調用viewDidLoad。
-[ResultsTableVC initWithController:andTableView:]可能引用了allResults.view。
這將迫使allResults控制器加載其視圖(這當然會導致viewDidLoad觸發)。 所有這些都是同步發生的,實際上是您從initWithController:andTableView返回之前:
我正在猜測,但您可以嘗試以下方法:
favoritesTableVC = [[[FavoritesTableVC alloc] initWithFrame:CGRectMake(0, 10, SOME_HARD_CODED_INT, SOME_HARD_CODED_INT) andController:self] retain];
並查看是否得到相同的結果。
我的猜測是self.view
當時指向nil
。
但這並不能解釋為什么init
是在之后調用的,但是嘗試時沒有害處。
(我還沒有測試)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.