2012-08-24 25 views
7

我不斷收到以下錯誤我解僱,從攻定義的UIMenuController在iPhone上的一個UIWebView打開字典時: -_UIFallbackPresentationViewController

Unbalanced calls to begin/end appearance transitions for <_UIFallbackPresentationViewController: 0x10ab9640>. 

而這個錯誤之後,UIMenuController停止顯示出來,在任何UIWebView。

任何想法這裏發生了什麼?

更新:錯誤實際上出現在字典視圖打開時,而不是關閉它時。

更新2:該錯誤是應用程序廣泛。任何地方都有可選的文本(即webview,textview等),我只能使用define字典一次。這個錯誤顯示了&然後,我必須退出應用程序&再次啓動它,以使用字典。

+1

僅供參考。我可以在模擬器和設備上看到相同的警告,但之後菜單和字典繼續適用於我。 –

+0

@Mike Weller:我希望這對我也一樣,我有兩個應用程序。在一個應用程序中,詞典和菜單都會繼續工作,儘管有警告。對於第二個應用程序,字典在第一次後停止工作。一旦字典出現,甚至無法再次顯示菜單。 –

+0

你有任何瘋狂的視圖控制器層次結構的東西嗎?像直接插入視圖控制器視圖而不使用正確的包含API? –

回答

4

終於找到了這個答案。當字典被系統呈現時,它的窗口獲得焦點(參見makeKeyAndVisible:在UIWindow中),這非常棒。問題出現在解除持有字典的窗口不能正確給出主應用程序窗口的焦點時。

如果您在字典出現之前和之後打印出[UIApplication sharedApplication] .keyWindow,那麼您會看到在應用程序窗口是keyAndVisible之前以及之後它是不同的窗口。對於我來說,我有一個單獨的應用程序消息窗口,它位於狀態欄的頂部,在辭典解散之後,一個是keyAndVisible。

因此,所有我必須做修復它是在我的UIWindow子類以下重寫方法不正確地接收焦點:

- (void) makeKeyWindow { 
    AppDelegate * appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate.window makeKeyAndVisible]; 
} 

我不知道這將如何對這些,如果你的工作沒有你你自己的UIWindow會被重點關注,但絕對最壞的情況下,你可以添加一個虛擬的UIWindow,它可以獲得焦點並從上面添加完全相同的代碼片段。

+0

你的意思是「在我的UIWindow子類中有以下重寫方法」?我的項目中唯一的UIWindow發生在appDelegate中,如果我創建子類並放置函數並重寫makeKeyWindow方法,它將不起作用,因爲makeKeyWindow進入無限遞歸。 :-S – Sufian

+0

@Sufian嘗試使用nslog獲取[UIApplication sharedApplication] .keyWindow在字典出現和解除後的結果。以下代碼可能會有所幫助。 NSLog(@「%@」,[UIApplication sharedApplication] .keyWindow); 就我而言,我使用的是一個狀態欄覆蓋圖,它正在成爲關鍵窗口。在我的狀態欄覆蓋類中註冊UIWindowDidBecomeKeyNotification並在發佈通知時調用上面提供的代碼acue爲我解決了此問題。 –

+0

我如何知道字典已被提交或解散? viewWillAppear和viewWillDisappear方法不會被調用。你能再詳細一點嗎? – Sufian

1

錯誤消息建議您開始轉換,但缺少對相應的結束方法的調用。

  • 您是否嘗試過沒有動畫的轉換? (animated: NO

  • 使用switch語句和 忘記break;

  • 如果您正在執行塞克時,有時會出現這種行爲,做到在-viewDidAppear代替-viewWillAppear

希望它有點幫助! :)

+0

謝謝你的努力,但我沒有進行過渡,系統是,因爲字典是由默認系統UIMenu提供的,任何關於我如何從中刪除動畫的幫助,我都不會感激。聲明,我也沒有執行seque。再次感謝您的努力!:-) –