2011-02-27 39 views
0

所有,何時分配/初始化伊娃,當不

http://developer.apple.com/library/ios/#samplecode/DateCell/Introduction/Intro.html

伊娃「pickerView」聲明中MyTableViewController.h這樣蘋果的示例代碼「DateCell」 :

@interface MyTableViewController : UITableViewController 
{ 
@private 
    UIDatePicker *pickerView; 
    UIBarButtonItem *doneButton; // this button appears only when the date picker is open 

    NSArray *dataArray; 

    NSDateFormatter *dateFormatter; 
} 

@property (nonatomic, retain) IBOutlet UIDatePicker *pickerView; 
... 

它是在類文件MyTableViewController.m合成這樣的:

@implementation MyTableViewController 

@synthesize pickerView, doneButton, dataArray, dateFormatter; 
... 

當這個應用程序運行時,我可以將NSLog(@"%@",pickerView)插入到ViewDidLoad中,並且看到這個,果然,ivar pickerView是真實的並且有一個值。然而,無處不在,這個類alloc/init pickerView。這就是問題的根源:如果沒有明確地完成,它會如何完成?我很天真地將這些東西拷貝到我的RootViewController.h和.m文件中,我可以做同樣的事情,但是pickerView固執地保持未初始化(並且我的NSLog調用返回「(nil)」作爲它的值)不管我嘗試什麼,都沒有明確地分配/啓動它。當然RootViewController正在被實例化,或RootView不會出現,對吧?那麼,我的pickerView不應該像蘋果一樣繼續前進嗎?

所以...我必須手動分配/ init pickerView實例變量?如果是這樣,Apple在哪裏做?或者他們如何以其他方式做它?

我想我在這裏錯過了一些非常基本的東西,但我不知道它是什麼。我看不到界面生成器或XCode中看起來與我的和他們不同的任何東西,但是我已經有了隧道視覺,並且看不清楚什麼。

感謝,

比爾

回答

3

該行的IBOutlet中修改的關鍵是......

@property (nonatomic, retain) IBOutlet UIDatePicker *pickerView; 

IBOutlet中是一種裝飾,指示對象將被掛接/連接/當相應的xib(Interface Builder)文件被加載時被初始化。您正在查找的示例應用程序將包含一個UITableViewController,它是一個連接到UIPickerView的xib。

您可以選擇創建自己的定製xib文件並連接到UIPickerView實例的路線,也可以手動初始化選取器。

+0

我敢打賭,你不感到驚訝,你釘的答案!連接在MainWindow.xib文件中的UIDatePicker和MyTableViewController類之間,所以當我在MyTableViewController nib文件中查看時......沒有什麼可見的! Apple是否有理由選擇將UIDatePicker放入MainWindow nib文件而不是MyTableViewController nib文件?這似乎有點'斷開,但可能有一個聲音設計模式在這裏工作,我不知道。 (而且,這很有可能。)再次感謝,馬特! – BillEccles 2011-02-27 21:34:51

+0

我快速瀏覽了一下這個示例,並且您對MainWindow.xib的奇怪使用完全正確。就我個人而言,我將在MyTableViewController nib中設置連接 - 感覺就像合適的範圍。把它推到MainWindow的唯一理由是設置一個與應用程序級對象UIApplication或它的委託之一的連接,這個例子沒有這樣做。很高興你排序雖然:) – mmccomb 2011-02-27 21:45:22

0

Interface Builder(nib或xib)會自動將IBOutlet ivar與組件的連接對待。

IBOutlet中是一個特殊的關鍵字,這只是用來告訴Interface Builder來 治療實例變量或屬性 作爲出口 。它實際上定義爲 什麼也沒有,因此它在編譯 時沒有任何影響。

+0

感謝這些鏈接 - 我仍然熟悉文檔,並一直在尋找這種蘋果提供的信息。我已閱讀過關於這個主題的其他書籍,但所有這些書籍都是以示例的方式教導的,並不一定解釋Apple在工具集和設計背後的思維過程。 – BillEccles 2011-02-27 21:41:53