2016-09-30 24 views
0

我的應用程序有一個視圖控制器和一個視圖。當我在xcode上的模擬器上運行我的應用程序時,應用程序將加載,並且如預期的那樣調用viewDidLoadviewDidAppearios模擬器viewDidLoad,viewDidAppear在關閉或退出後不會調用

  1. 當我去到模擬器主屏幕,然後再回來到應用程序, 我希望viewDidLoad被調用,但事實並非如此。

  2. 當我QUIT的 應用程序通過以下these directions,並重新啓動應用程序新鮮,我 希望被稱爲兩種方法,但都被調用。

如果這些事件不觸發這些調用,那麼會觸發那些調用? 很難相信在真實設備上,viewDidLoad只會被調用一次 - 應用程序第一次加載。

回答

3

它說「負載」。它的字面意思是它在視圖控制器加載(實例化)時被調用。此外,當視圖出現時,例如當您按下它或關閉其上的其他視圖控制器時,將會調用「出現」。

你想要的東西是註冊下列通知

static let UIApplicationWillEnterForeground: NSNotification.Name 
static let UIApplicationDidEnterBackground: NSNotification.Name 
static let UIApplicationDidBecomeActive: NSNotification.Name 

在您的視圖控制器的viewDidLoad()補充通知。

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.applicationDidBecomeActive), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil) 

然後,當應用程序從後臺變爲活動狀態時,將調用以下方法。

func applicationDidBecomeActive() { 
    // Update your view controller 
} 

案例2:

如果退出喜歡的指令程序,調試會話終止這樣的破發點,並記錄不工作。如果你退出你的應用程序,並想檢查中斷點或日誌,你需要在Xcode中再次運行。

+0

一旦我安裝了一個應用程序,'viewDidLoad'只被調用一次? – lf215

+0

是的。當它被實例化並且所有的屬性被加載時它僅被調用一次。 –

+0

如果我關閉手機並將其打開,那麼應該再次打開應用程序viewDidLoad?我對你的答案大加讚賞,因爲它解釋了案例1,但我沒有選擇它作爲解決方案,因爲我不明白案例2的證據。 – lf215