2010-12-19 65 views
12

我正在潛入iOS開發領域,並且正在構建一款益智遊戲來幫助我熟悉該平臺。我有AdWhirl在用戶完成拼圖時顯示的分數屏幕上顯示廣告。問題是,分數屏幕視圖控制器至少需要幾秒鐘請求並接收廣告,在這段時間內用戶查看分數並移至不同的視圖。我計劃實現用戶解決謎題時發生的動畫,並且動畫完成所需的時間將是請求並接收將在下一個(分數)視圖中顯示的廣告的好時機也將採取。iOS開發:在推送到導航堆棧之前,如何預加載視圖控制器?

在解決拼圖動畫發生的時候,如何預加載下一個視圖控制器,以便在將視圖控制器推入導航堆棧時存在廣告?如果這是不可能的,或者如果這是一個壞主意,那麼您對於在動畫發生時如何請求和接收廣告有什麼建議嗎?

非常感謝您的智慧!

注意:對於那些不熟悉AdWhirl的人來說,請求和接收廣告的過程很簡單。在您希望廣告出現在視圖控制器的viewDidLoad方法中,創建AdWhirlView(UIView的子類),將其添加爲子視圖,並調用請求廣告的方法。當廣告到達時,它會調用委託方法將其顯示在父視圖中。

回答

-4

你可以手動調用loadView,我不知道是否有任何副作用,但我不這麼認爲。

感謝Tommy的確,訪問視圖屬性確保只有在視圖層次尚未加載的情況下才能有效地調用loadView,避免在loadView代碼注意到它的情況下發生任何潛在的泄漏。

+13

有一個潛在的不良副作用 - 如果視圖已經加載,然後loadView可能會導致泄漏。在視圖控制器上訪問'視圖'屬性會更好(不需要做任何事情),這會導致視圖加載視圖。 – Tommy 2010-12-19 19:07:40

+0

謝謝!在將視圖控制器推入堆棧之前訪問視圖屬性效果很好! – BeachRunnerFred 2010-12-19 19:23:28

+0

太棒了。這對我今天幫助很大,投票。 – Richard 2011-01-30 04:33:14

29

那裏只是使用[viewController loadView]的一個副作用,那就是viewDidLoad不會在視圖加載後自動調用。

要正確地做到這一點,並做出的,而不是你自己打電話的loadView你可以實例化UIViewController's確保viewDidLoad中被調用,查看使用

UIView *view = myViewController.view; 

UIView *view = [myViewController view]; 

這兩個呼叫會loadView(如果視圖尚未加載),然後在視圖加載完成後顯示viewDidLoad。

14

作爲對接受答案的迴應,您不得手動調用-loadView。從documentation

您不應該直接調用此方法。視圖控制器在請求其視圖屬性時調用 ,但當前爲零。 此方法加載或創建視圖並將其分配給視圖 屬性。

相反,你應該調用[myViewController視圖],這將觸發視圖加載。

一如既往,閱讀文檔!

2

把這個你委託的application:didFinishLaunchingWithOptions:

​​3210

dispatch_async將會使整個事情負荷背景。

0

在iOS 9中增加了一種新方法loadViewIfNeeded()。我相信它最初是用於視圖控制器的單元測試,但它也適用於這種情況。

相關問題