2012-12-05 188 views
4

我已經在Xcode 4.5中創建一個新的項目,我已經awakeFromNib不叫,但顯示廈門國際銀行

打電話給我的視圖 - 控制

- (ID)initWithNibName:包:

從AppDelegate中,因爲它在默認的項目叫模板和我不使用故事板 但awakeFromNib不叫 我也搜查,但無法理解爲什麼awakeFromNib不是調用。

通過對-(void)awakeFromNib 蘋果的文檔「它已經從一個界面生成器存檔或筆尖文件加載後準備用於服務的接收器。」 「符合NSCoding協議的對象(包括UIView和UIViewController的所有子類)使用它們的initWithCoder:方法初始化爲 。所有不符合 的NSCoding協議對象都使用它們的init方法初始化。實例化並且 初始化後,nib加載代碼重新建立所有這些對象的出口和動作連接,然後 調用對象的awakeFromNib方法。

我的問題是,爲什麼在加載xib文件時awakeFromNib沒有調用? 我是否做錯了什麼?請詳細說明

+0

代碼與默認項目模板相同,我剛剛在視圖控制器 – codester

回答

11

awakeFromNib:僅在視圖控制器位於nib文件內時纔會調用。
在這種情況下,您使用init initWithNibName:bundle初始化視圖控制器,因此視圖控制器的內容位於筆尖內部,而不是視圖控制器本身
如果打開xib文件,在xib中拖動一個對象並將該類設置爲您的視圖控制器類名,那麼將調用awakeFromNib(這種情況下,您不需要手動初始化視圖控制器)。
因此,請記住在xib文件中使用視圖控制器,並使視圖控制器不在xib文件中,而是從xib文件中加載所有內容。

PS:我交替使用了筆尖和xib。

編輯
我忘了告訴你如何去解決this.Override viewDidLoad中做的事情與初始化網點。

+0

中添加了awakeFromNib,但是通過蘋果文檔,它應該被調用,因爲它具有xib和xib未存檔和加載。 – codester

+0

Apple文檔說:「從接口生成器存檔或nib文件加載後,準備接收器以進行服務。」您的視圖控制器尚未從nib文件加載。打開nib文件,您將看到沒有視圖控制器實例。 –

+0

我認爲Ramy Al Zuhouri是正確的:'initWithNibName' * *創建一個視圖控制器並*將控制器的nib文件關聯起來。控制器*視圖*在需要時從nib文件加載。 –

2

爲什麼不直接添加 - (id)initWithNibName:bundle:方法到你的子類而不是 - (void)awakeFromNib?

我「awakeFromNib」方法被調用就好了,但我打開我的看法控制器:

myViewController *vc = [[[NSBundle mainBundle] loadNibNamed:@"myViewController" owner:self options:nil] objectAtIndex:0]; 

所以我想知道如果因爲您使用initWithNibName而不是你的awakeFromNib不叫?

編輯:我剛剛看到您的評論,您將awakeFromNib添加到由XCode創建的默認項目的ViewController。創建項目時是否取消了「使用StoryBoard」框?如果您的筆尖位於該項目的主要故事板內,則可能會有一些額外的障礙需要跳過。

+0

是的,我沒有選中storybord的選項 – codester

+1

在你所知道的initWithNibName方法中,所有從xib加載的視圖都沒有初始化。所以他可能想使用awakeFromNib,因爲他需要處理爲xib文件檢索的所有東西爲此,他可以使用viewDidLoad。 –

+0

@Ramy Al Zuhouri謝謝你提到viewDidLoad我會失去原來的東西我錯過了顯而易見的事! –