2014-10-16 70 views
2

我正在經歷一些非常奇怪的事情:self.presentingViewController在iOS 8上破解?

創建一個非常基本的單視圖項目,並將第二個視圖控制器添加到故事板,以及從第一個到第二個的模態segue。從視圖控制器啓動segue並用performSegueWithIdentifier:以編程方式觸發它。

在模態呈現視圖控制器的viewDidLoad,添加此日誌:

NSLog(@"%@", self.presentingViewController); 

現在運行的iOS 7上的應用程序,你應該得到一個日誌像這樣的:

<ViewController: 0x7fa8e9530080> 

這只是應用程序的初始視圖控制器的參考,它提供了模態視圖控制器。

現在在的iOS 8運行同樣的事情,你會得到:

(null) 

這是怎麼回事?這是一個已知的問題嗎?當然,我期望在兩個系統上都有完全相同的行爲。

+0

viewDidLoad應該真的用於初始化,在這個階段,不能保證接收器的控制器視圖層次結構已放置在導航樹中。如果這是你的意圖,你應該重寫viewWillAppear或viewDidAppear。儘管它在早期版本中有效,但文檔明確指出它應該用於額外的初始化。它聽起來好像在iOS 8中一樣,接收器的初始化工作正在進行中。 – MDB983 2014-10-16 15:02:50

+0

嗯..這是有道理的..我會做一些測試,並讓你知道如果你應該把你的評論回答 – rdurand 2014-10-16 15:21:47

+0

@ MDB983:事實證明你是正確的,即使在* viewWillAppear:*呈現視圖控制器是組。如果您想將您的評論轉換爲答案,我很樂意接受它。 – rdurand 2014-10-17 07:09:01

回答

3

謝謝......正式答覆。

viewDidLoad應該真的用於初始化,在這個階段,不能保證接收者的控制器視圖層次結構已經放置在導航樹中。如果這是你的意圖,你應該重寫viewWillAppear或viewDidAppear。儘管它在早期版本中有效,但文檔明確指出它應該用於額外的初始化。這聽起來好像在iOS 8中,接收器的初始化正在執行之前