2015-10-10 74 views
0

我試圖在啓動應用程序時將數據從parse.com類加載到視圖控制器的tableview中。我可以從viewDidLoad方法加載數據,並按預期運行。但是,如果我從initWithStyle調用它,它不會將數據加載到tableview中。數據已加載,但reloadData調用似乎不起作用,因爲它在viewDidLoad之後執行。將數據加載到TableView中initWithStyle vs viewDidLoad

我正在尋找澄清何時重寫初始值設定項(init,initWithStyle,initWithNibName)以及何時取決於狀態轉換(viewWillAppear,viewDidLoad)。初學者非常困惑。

非常感謝任何見解。

+1

您很少會重載視圖控制器的初始值。此時,由於筆尖/場景未加載,您的任何插口都不會連接。 ViewDidLoad是執行此類任務的正確位置 – Paulw11

回答

0

你的目標是用數據填充你的視圖,所以你希望你的視圖控制器的視圖準備好,當你開始從解析中加載數據並填充到視圖中。

所以你有一個ViewController哪個視圖是一個tableView。

起初你可能會認爲initWithStyle是執行你的代碼,因爲的tableView將準備在正確的地方,但它是不是因爲在這一點上,你有沒有保證您的控制器具有其視圖的引用 (中的tableView)

同樣的理由,爲什麼你不能因爲在那個階段的ViewController將被初始化,但它認爲沒有加載使用initWithNibName的的ViewController

因此回調viewDidLoad中,這是從框架保證當該方法被調用,您的視圖控制器的看法將準備和加載(但尚未顯示出來; viewDidAppear回調是在這裏爲)爲您將數據填充到視圖中。

viewWillAppear中viewDidAppear可以工作太多,但請注意,這些方法被調用多次在視圖控制器生命週期,我建議你使用NavigationController把日誌語句在這些回調,並嘗試推動其他的ViewController在你的ViewController之上。 viewWill/DidAppearviewDidLoad將很快變得清晰