2012-11-07 18 views
0

我打開了一箇舊的iOS項目,如2010年的iOS 3的東西,並發現它在啓動時崩潰。例外是:initWithCoder異常時,使主視圖可見(舊的IOS項目)

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:' 

我已經搞亂了項目現在幾個小時,試圖追查是什麼導致它。我覺得我已經耗盡了我的智慧和資源,而且從零開始重新制作大部分應用程序。任何想法可能是什麼原因?

我的調查結果:

該項目是什麼活在AppStore一個全新的git結帳。是的,該應用程序非常簡單,足以在兩年內沒有任何更新的情況下仍能正常運行。

我改變了編譯方式,將基本SDK從4.1(不再在Xcode中提供)更改爲iOS6並運行。目標在項目設置中仍然爲3.0。

我檢查了我沒有在我的代碼中的任何地方調用或實現initWithCoder。我指定的代碼中的行只是對main.m中的UIApplicationMain()的調用,這對我沒有多大幫助。

該應用程序只是3意見。主要,細節和關於。它看起來像MainView或MainViewController包含該問題。我從應用程序結束時不會崩潰,當我:1.選擇不啓動時將其添加到NavigationController。 2.選擇添加AboutController。

我懷疑問題是Xib文件而不是控制器或視圖代碼,因爲我可以使用AboutView Xib啓動MainViewController並啓動應用程序。

我想知道我是否可以「修復」這個Xib,或者如果我必須創建一個新的並重新佈局GUI元素?我擔心的是我唯一的前進方向。該應用程序很簡單,但仍然需要一些時間來重新佈局主要(和最密集的)視圖。另外,我寧願知道問題出在哪裏,而不是一天重新開始,甚至有可能在同樣的情況下結束。

我是否在正確的軌道上?有沒有辦法追蹤有問題的代碼或GUI小部件?

在此先感謝您的任何建議。

更新:在新的Xib中重新創建用戶界面的基礎知識並使用該應用程序工作。還想知道我是否可以通過更改某個設置或其他設置來修復舊設備。

回答

1

我可以想到兩種可能性,可能會導致這種情況,.xib文件有一些格式問題,或者您在此.xib中使用折舊對象,因此SDK不再具有特定的initWithCoder:方法.xib需要。

要使Xcode重寫文件,並可能修復任何格式問題,請更改文檔版本。在Xcode中,選擇.xib文件並顯示實用程序窗格的文件檢查器選項卡以訪問版本設置。

對於另一種可能性,我會針對違規對象執行手動二進制搜索.xib。刪除一半的對象並運行應用程序。如果它工作,你刪除了壞對象。我相信你明白了。可能有多個這樣的壞對象,但你應該能夠快速找到一個,找出如何更新它,然後修復其他類似的對象。

+0

謝謝。你對我的問題的可能原因的理由聽起來很穩固。我記得將xib版本更改爲新版本,所以我懷疑在某處有一些舊的(iOS3時代)小部件。二元搜索並不是我能想到的最有趣的事情,但你能做什麼:) –

0

在Swift下,也可能發生此錯誤,因爲init?(coder aDecoder: NSCoder)初始化函數失敗(如初始化後?所示)。在故事板或筆尖初始化對象時,會導致初始化程序失敗並返回nil,從而引發錯誤。

相關問題