我終於在將近2天的時間在多臺機器上試用後解決了問題!我不會受挫!
我將問題追蹤到在應用程序初始化時調用的UINavigationController上的setViewControllers調用。我總是通過3個對象(導航控制器中有3個窗格)。即使我已經刪除了第三個對象,如前所述,三個對象總是會被傳入。前兩個對象的類型是正確的,但第三個對象只是一個UIViewController。奇怪的是,這個視圖控制器有一個nibName,它對應於我以前刪除的目標文件和Xib文件。當然,當這個borked UIViewController被調用時,它會崩潰,因爲顯然已經刪除了相應的nib。請記住,這個對象或Xib的文本名稱無法在我的目錄中找到,所以我完全不知道當我運行我的應用程序時它是如何在它的世界中存在的。
所以,我想應用程序可能沒有被正確清理。我加倍和三重檢查了這一點。我甚至驗證了我的工作區設置是正確的(文件 - >項目設置 - >高級)。該應用程序確實每次都會重新編譯。
其次,我開始思考也許是通過其他方式設置對象。反向工作時,我添加了一些斷點,並發現在父UINavigationController上調用了initWithCoder - 這最終正在調用對象上的setViewControllers並分配三個視圖控制器(其中之一是有問題的控制器)。我可以很容易地從調用堆棧中看到正在加載的Nib文件正在反序列化某些令人反感的內容。
所以,我開始挖掘我的Xib文件。當然,對象名稱不在文件中(因爲grep沒有找到任何東西)。我刪除並重新創建了包含我的根UINavigationController的Xib部分。這最終改變了Xib文件中的Object ID和ref。其次,我創建了一個新的Xib和UIViewController,其名稱與我之前刪除的名稱相同,希望如果我創建並重新刪除它們,Xcode可能會很開心。然後我編譯,重新刪除它們,再由Xib文件更新,並用grep重新確認,確實沒有這個名字。
它工作。在這個問題上花了好幾天之後,我確信界面生成器中存在一個bug,但是我想重新訪問這個問題來提交bug報告嗎?絕對不是......
「沒有,除了我UserInterfaceState.xcuserstate匹配」 - 你試圖刪除這個文件? – Kreiri 2013-04-09 19:28:34
你可能在你的xib中設置了一個UIViewcontroller類到那個類? – Daniel 2013-04-09 19:31:22
@Daniel,因爲xib文件只是純文本而不會顯示在我的grep中? – Brett 2013-04-09 19:34:46