2011-11-01 49 views
1

在我的iPhone應用程序。方法ViewDidLoad不從子類調用?

我有兩個視圖控制器。

他們有SuperClass-SubClass關係(繼承)。

讓說ViewController1是一個SuperClass和ViewController2是一個子類。

它們都共享超類的通用筆尖文件。因此,理想情況下,ViewController1的所有方法都被繼承到ViewController2(如果我沒有在ViewController2中重寫它)。

所以,要進行檢查。當我

我viewcontroller2負載viewDidLoad中沒有從超類中調用。

**ViewController1 

-ViewDidLoad 

-ViewWillApper 


**ViewController2 

Other methods but I am not writing ViewDidLoad and ViewWillAppear 
//--------------- 

所以,當這個單獨的頁面ViewController2被調用。 ViewDidLoad未被稱爲SuperClass。 但是ViewWillAppear被調用。

回答

1

可能是-viewDidLoad:僅被調用一次,因爲兩個類之間共享相同的nib文件。第一次將筆尖裝入內存後,調用-viewDidLoad:。它不會被第二次調用,因爲它只是從已存在的內存中重用,所以不需要重新加載。這可以解釋爲什麼-viewWillAppear:仍然被調用。

UIViewController Class Reference: -viewDidLoad:

viewDidLoad中

控制器的視圖後調用被加載到存儲器中。

  • (無效)viewDidLoad中

討論

視圖控制器加載其相關聯的視圖到內存中後,此方法被調用。無論視圖是存儲在nib文件中還是以編程方式在loadView方法中創建 ,此方法都稱爲 。此方法通常用於對從nib文件加載的視圖執行其他初始化步驟 。

0

你怎麼能說你的ViewController1ViewController2都有繼承?發佈ViewController2.h文件的代碼。

你做這樣

@interface ViewController2 : ViewController1 { 
} 

如果你正在做類似上面那麼只有你可以說你是從繼承的VC1 VC2。只有這樣你才能撥打VC1的viewDidLoad

如果您僅使用1個xib文件和2個VC,並且您討論的案例並不意味着您正在繼承。

當你寫

ViewController1 *vc1 = [[ViewController1 alloc] initWithNibName:@"ViewController1"]; 

ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController1"]; 

這意味着你重用你的.xib文件,不繼承的類...