2016-04-03 49 views
0

我的項目結構/依賴是:爲什麼導入一個ViewController會導致Xcode無法找到另一個ViewController?

的AppDelegate - >導入 「FirstRunViewController」 和 「MainViewController」

  • 如果用戶登錄,它設置RootViewController的到MainViewController
  • 如果用戶未登錄,它將rootViewController設置爲FirstRunViewController

FirstRun視圖控制器 - >導入 「MainViewController」

  • 登錄後/註冊,它設置的viewController作爲MainViewController

MainViewController - >導入 「SettingsViewController」

  • 禮物SettingsViewController(需要時)

SettingsViewController - >導入 「FirstRunViewController」

  • 如果用戶選擇退出,它設置的viewController作爲FirstRunViewController

我的問題

導入 「FirstRunViewController」 在「SettingsViewController」(處理註銷)導致Xcode無法在另一個不相關的ViewController中找到有效的委託。特定的錯誤代碼是「沒有類型或協議名爲ABCDelegate」。

刪除「#import」語句將允許代碼運行和編譯,但禁用註銷。

我的問題

爲什麼會出現這種情況?

我該如何阻止這種情況發生?

+3

但是ABCDelegate在哪裏申報?還請顯示實際的進口報表和它們的位置:不要只說「進口」,因爲誰知道你真的在做什麼?不要_描述你的代碼; _展示下。如果你做得更可靠和清晰。 – matt

+0

嘗試使用'@ class'代替'import' –

回答

1

您可能遇到一個循環依賴問題。我會用一個例子來解釋。

A進口B. A要求B已經被編譯,所以它可以引用它的方法。我們說B是A的依賴性,因此Xcode中會自動排列在它編譯事物的秩序:

  1. 一個

以便當編譯,B已經編譯。然而,當我們添加第三類會發生什麼,CC進口,而B進口C.

  1. 一個
  2. Ç

但現在當編譯器試圖編譯B,C沒有被編譯,所以它抱怨說它找不到C。

但是,簡單地改變順序不會改變事情,因爲C需要A但是A需要B但是B需要C.它是循環依賴。

解決此問題的一種方法是創建預編譯頭(請參閱Badal Shah鏈接的問題)。這基本上保證了C存在並且尚未編譯完成,並且會讓B成功編譯,從而讓整個循環成功編譯,從而解決了這個問題。

2

我不確定。但隨着你的流動,我可以感覺到這種情況發生,因爲循環依賴

解決方案: -

使用.PCH文件並導入所有文件.PCH文件,並根據您的要求使用。

關於詳細討論.pch文件檢查這一點。

what-is-prefix-pch-file-in-xcode

相關問題