2009-11-26 25 views
1

裏面一個UIViewController的,我執行以下操作:iPhone - NSString的值未設置


TVController* stopTimes = [ [ TVController alloc ] initWithStyle: UITableViewStyleGrouped ]; 
stopTimes.tableView.frame = CGRectMake(0, 180, 320, 280); 
stopTimes.tableView.backgroundColor = [ UIColor whiteColor ]; 
stopTimes.theID = stopID; 
[ self.view addSubview: stopTimes.tableView ]; 

其中TVController是一個UITableViewController。

在TVController類中,我有一個名爲theID的NSString屬性已被合成。在執行上面的「stopTimes.theID = stopID」時我沒有遇到任何錯誤,並且TableView按預期顯示。在這個TVController類的'viewDidLoad'中,我只是簡單地嘗試NSLog'theID'來表明它的工作,但它是(null),不管我做什麼。

但是,我試圖設置單元格的文本'theID',它工作得很好。

那麼爲什麼'theID'在設置單元格時正確設置,而不是在viewDidLoad中?

+0

你是如何初始化stopID的? – 2009-11-26 06:09:33

回答

1

viewDidLoad將在加載視圖後立即調用,無論是從您的NIB還是您的loadView實現。視圖在第一次訪問視圖控制器的視圖屬性時被加載,而不是在視圖控制器被分配時或稍後的時間點加載。

這意味着loadView(其中的缺省實現將加載您的NIB,如果有的話),然後viewDidLoad在第二行中被第一次調用,因爲您正在訪問視圖控制器的tableView屬性,在爲視圖控制器的ID屬性實際設置一個值之前會發生這種情況。當然,當你的表格內容被加載時(除非你在別處調用了-reloadContent,否則直到表格視圖實際出現纔會發生),你的theID屬性已經被設置。

你可以非常簡單地通過在調試器中設置兩個斷點來測試你自己 - 在你設置theID屬性的上面的代碼片段的第三行中,以及在viewDidLoad中的NSLog()調用中的一個斷點。你會看到後面的斷點是先觸發的。

P.S.歡迎來到堆棧溢出!不要忘記閱讀常見問題解答,併爲您的問題標記接受的答案(當然,如果它們是值得接受的好答案)。

+0

夢幻般的答案!我現在已經解決了這個問題。這樣一個簡單的解決方案,否則會花費我很多時間。感謝您的回答並感謝您的歡迎! – 2009-11-26 06:56:16