2013-05-25 80 views
1

我想我在IOS SDK中發現了一個錯誤,但我不知道如何解決這個問題,而沒有 嚴重修改我的代碼。模型控制器在切換後處於停滯狀態rootViewControllers

問題? 如果我呈現模態視圖控制器,比用戶。當用戶回來該應用移動該應用背景狀態, ,i中的RootViewController的切換到不同的視圖 控制器,其中i驗證用戶會話,並提出一些更多的邏輯。 完成此步驟後,我將替換原始的rootViewController。 問題是由rootViewController, 提供的modalViewController被隱藏/未顯示。當我試圖解僱它時,它給了我一個錯誤 我試圖駁回它不可見的觀點。

當我嘗試去再一次呈現它(或者只是舉例另一個視圖控制器),它的錯誤我,我嘗試提出另一個視圖控制器時提出視圖控制器。

所以,我無法關閉模態視圖控制器和我不能呈現一個新的。

總之,似乎如果你提出一個modalviewcontroller,不是改變你的 RootViewController的另一個視圖 - 控制,並恢復原來的RootViewController的 - > 任何情態動詞是其中提出的是有點兒打入冷宮的狀態。

任何人都可以算出來?任何其他解決方案「不要取代你的rootviewcontroller」?

非常感謝

+0

你是如何做這個切換的根視圖控制器?你是否保留一個指向已經呈現模態的指針?這聽起來像是從你的描述中看到,當你再次切換到該控制器的同一個實例時。 – rdelmar

+0

是的,當進入後臺時,我爲我的「MainViewController」存儲引用,並將一個「EntranceViewController」作爲rootViewController。在我完成了入口視圖控制器後,我恢復了作爲rootViewController的「MainViewController」,但不幸的是呈現的模式視圖控制器是不可見的,但仍然存在於邏輯中 – Patz

+0

是否有你不想解僱的理由該應用程序進入後臺時該模式視圖控制器?這似乎是最簡單的解決方案。 – rdelmar

回答

1

你爲什麼要找比其他解決方案「並不能取代你的RootViewController的」。這是正確的指導。這不是iOS中的錯誤。通常,您不應該替換根視圖控制器。

這聽起來像你真正想要的是第三視圖控制器作爲窗口的根視圖控制器和管理的主要入口和視圖控制器爲兒童。嘗試一下,也可以使用視圖控制器,如果遇到麻煩,我們可以嘗試提供幫助。

視圖控制器設計用於工作在非常特殊的方式,如果你濫用它們,你會遇到種種不良影響。有時候,一開始你就會放棄它,放心下線,它會回來咬你。

View Controller Programming Guide

1

假設你想保持原來的做法,你在哪裏兩個控制器之間的交換,而不是使用第三對它們進行管理,你可以駁回呈現視圖控制器,當你從後臺返回,在交換出根視圖控制器之前。

例如,在-applicationWillEnterForeground:

if (self.window.rootViewController.presentedViewController != nil) { 
     // do any tear-down relating to the modally presented view controller 
     // Now dismiss it. 
     [self.window.rootViewController dismissViewControllerAnimated:NO 
                  completion:nil]; 
    } 

這會消除,因爲一個已經被提出是引起了不能夠顯示一個新的視圖控制器錯誤消息的情況:你的應用程序代理的。