2011-12-11 107 views
0

我有一個視圖控制器,用於初始化兩個其他視圖控制器。一個控制器的視圖沒有顯示,我追蹤到問題的實例爲零時,它被添加到超級視圖。在初始化方法完成之前調用UIViewController viewDidLoad

這是代碼。在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
    • addSubview favoritesResultsVC
  • favoritesResultsVC初始化

這是一個單獨的線程,所以我不明白viewDidLoad中如何調用初始化之前完成。

回答

0

我正在猜測,但你可以試試這個:

favoritesTableVC = [[[FavoritesTableVC alloc] initWithFrame:CGRectMake(0, 10, SOME_HARD_CODED_INT, SOME_HARD_CODED_INT) andController:self] retain]; 

,看看你是否得到相同的結果。
我的猜測是當時self.view指向nil
但是這並不能解釋爲什麼init在......之後被調用,但在嘗試中沒有任何傷害。
(我還沒有測試過)

+0

好猜。我正在將此應用轉換爲通用應用。重組視圖和視圖控制器將成爲頭痛。我不確定它爲什麼這樣做,但是我認爲我現在可以解決這個問題。謝謝。 – Jim

1

- [ResultsTableVC initWithController:andTableView:]可能引用了allResults.view。

這將強制allResults控制器加載其視圖(這當然會導致viewDidLoad觸發)。所有這些都是在initWithController實際返回之前同步發生的:andTableView:

+0

感謝您的解釋。 – Jim

相關問題