2016-04-03 6 views
0

マイプロジェクト構造/依存関係は次のとおりです。なぜViewControllerをインポートするとXcodeは別のViewControllerを見つけることができませんか?

AppDelegate - ユーザーがログインしている場合>輸入 "FirstRunViewController" と "MainViewController"

  • 、それはMainViewController
  • にrootViewControllerを設定
  • の場合ユーザーがログインしていない場合は、rootViewControllerをFirstRunViewControllerに設定します。

FirstRun ViewControllerを - ログイン後>輸入 "MainViewController"

  • は、/サインアップし、それはMainViewController
  • としてのViewControllerを設定

MainViewController - >輸入 "SettingsViewController"

  • プレゼント必要に応じてSettingsViewController

SettingsViewController - >輸入 "FirstRunViewController"

  • 、ユーザがログアウトすることを選択した場合は、それが中で "FirstRunViewController" をインポート

私の問題

FirstRunViewControllerとしてのViewControllerを設定し、 "SettingsViewController"(ログアウトを処理する)は、Xcodeが関連のない他のViewControllerで有効なデリゲートを見つけることができなくなります。特定のエラーコードは、 "ABCDelegateという名前のプロトコルまたはタイプがありません"です。

"#import"ステートメントを削除すると、コードを実行してコンパイルできますが、ログアウトは無効になります。

私の質問

これはなぜ起こるのでしょうか?

どうしたらいいですか?

+3

しかし、ABCDelegateはどこで宣言されていますか?また、実際の輸入声明とその場所を表示してください:あなたが本当にやっていることを誰が知っているので、単に "輸入"と言うだけではありませんか?あなたのコードを_describe_しないでください。 _それを示す。あなたがそうするなら、はるかに信頼性が高く、明確です。 – matt

+0

代わりに '@ class'を使ってみてください。 –

答えて

1

あなたはおそらく循環依存の問題を持っています。私は例を使って説明します。

インポートB. B.では、メソッドを参照できるように、Bをコンパイル済みにする必要があります。 Aがコンパイルされるとき、Bがすでにコンパイルされるように

  1. B

:私たちは、BはA.だから、Xcodeのの依存関係を自動的にそれは物事をコンパイルする順序を配置していることを言います。私たちは第三のクラスを追加するときしかし、何が起こる、C. Cはインポートしますが、BはCの

  1. B

しかし、今は、コンパイラがしようとし

  • CをインポートBをコンパイルすると、Cはコンパイルされていないので、Cを見つけることができないと文句を言う。

    CはAが必要だがAはBが必要だが、BはCを必要とするので、単に順序を変更すると循環依存関係になる。

    これを解決する方法の1つは、あらかじめコンパイルされたヘッダーを作成することです(Badal Shahがリンクしている質問を参照)。これは、Cが存在し、まだコンパイルされていないことを本質的に約束し、Bをコンパイルしてループ全体をコンパイルすることを可能にすることで問題を解決します。

  • 2

    わかりません。しかし、あなたの流れで私はこのように感じることができる循環依存のために発生します。

    ソリューション: -

    使用.PCHファイルや.PCHファイルで、あなたのすべてのファイルをインポートして、あなたの条件に応じてそれを使用しています。

    .pchファイルの詳細については、こちらをチェックしてください。

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

    関連する問題