web-dev-qa-db-ja.com

Xcode 6:IBOutletをViewControllerに接続できません

Xcode 6にアップグレードした後、古いプロジェクト(サブプロジェクトを含むため、多くのターゲットがあります)を開きましたが、ストーリーボードViewContollerから関連オブジェクトへのリンクが機能しないことに気付きました。

たとえば、内部にTableViewを備えたViewControllerがあり、接続が欠落しているため、それで何もできず、VCで新しいIBOutletを再定義することもできませんVCからのストーリーボードの矢印は何にも接続しません。

より明確にするために:

screenshot

クラスは[カスタムクラス]セクションで定義されているため、問題は見つかりません。

screenshot

私は何をすべきか?ところで私はSwiftではなくobj-cを使用していますが、Swiftに関するすべての関連する答えを見つけました。

19
lorenzop

親ビューとカスタムクラスの間のリンクが壊れている(もう表示されていない)こともわかります。これは大きな問題です。

私が実際に作業しているアプリでまったく同じ問題があり、XCodeを5.xxxから6.1に更新しました。私のために働いた回避策は、すべてのView Controllerの参照を削除し、プロジェクトに再追加することでした...

その問題に直面しているすべての人に、ここに(迷惑な)トリックがあります:

  • ステップ1:.hおよび.mビューコントローラーファイルの両方を選択します
  • ステップ2:これらのファイルの参照を削除します
  • ステップ:プロジェクトツリーにファイルを再度追加します
  • ステップ4:ストーリーボードを開き、最終的にプロジェクトを再構築して笑顔にします

私はそれらの事が本当にうっとうしいかもしれないことを理解することができます、しかしそれは私のために働いた...それが他の誰かを助けることを望みます!

51
JJBoursier

ストーリーボード階層で、View Controllerを選択し、

enter image description here

右ペインの[カスタムクラス]セクションClassで、ドロップダウンと目的のView Controllerを選択します。

enter image description here

22
Tom Howard

新しいビューに最初のアウトレットを追加しようとすると、Xcode 6.1.1で同様の動作を経験しました。

上記のように参照を削除し、ファイルを再度追加しようとしましたが、成功しませんでした。

うまくいったのは、新しいビューに最初のプロパティを手書きで書いたことです。私はちょうど入った:

@property NSString *temp;

その後、通常の方法でコンセントを接続できました。最初のアウトレットを追加したら、一時プロパティを削除するだけです。

お役に立てれば。

5
Adam Nierzad

最初にアウトレットを入力するようです(Swift):

@IBOutlet weak var someViewOutlet: UIView!

次に、IBからアウトレットを上記のコードの一番右のタイプにドラッグします。

Xcodeを再起動すると、問題が解決する場合があります。 Xcode 6.1を使用する

4
hugey

私が助けられるかもしれない私の場合、問題はviewController.SwiftファイルがStoryBoardに接続されていないことでした。解決策は、3つのアイコン(View Controller、First Responder、Exit)の横のストーリーボードのビューの上部の境界をクリックすることです...カスタムView Controller。

お役に立てれば。 Xcodeは難しい!!

4
user462990

ここに私が信じる適切な解決策があります。

コードでコントローラーの名前を変更した場合は、.xibファイルを更新する必要があります。

インターフェースビルダーでそれを行う方法を見つけることができなかったので、これを行います:

  1. テキストエディターで.xibファイルを開きます。ファイルを右クリックし、[開く]>ソースコード

  2. <objects>ノードで、プロパティ<placeholder>を持つplaceholderIdentifier="IBFilesOwner"ノードを見つけ、customClass="MyOldControllerName"の値を新しいコントローラー名に置き換えます:customClass="MyNewControllerName"

そして、すべてのIBOutletsが再び正常に機能します。

2
Daniel Moreira

コメントしたすべての人に感謝します。

Xcode 6/6.0.1のバグです。 6.1バージョンをダウンロードしてインストールすると、問題はなくなりました。

1
lorenzop

Xcode 6.3では、Xcodeを閉じてMacを再起動する必要がありました。 Xcodeを単独で再起動しても、私にとってはうまくいきませんでした。

私は6.3を長い間持っていて、私の問題はいくつかのことをテストするために作成していた新しいプロジェクトにありました。今回は間違いなくアップグレードの問題ではありません。

0
Dan Loughney

同じ問題を解決するソリューションはありません...しかし、私は次のように解決しました:

  • xcodeを閉じる
  • プロジェクトのフォルダーの名前を変更する
  • xcodeを開く

そして、コンセントが再び戻ってきます

この解決策が同じ問題を抱えている人々にとって正しいものであることを願っています

0
Kazzar

さて、モジュール名がない場合は確認しましょう。

  1. ストーリーボードのViewControllerで、モジュールの名前を入力します。 (プロジェクト名)

2.別のフィールドで外でクリック。モジュールフィールドに戻ると、何も表示されない場合がありますが、プロジェクト名のドロップダウンメニューエントリが表示されます。

  1. プロジェクト名を選択して、すべてが適切かどうかを確認します。

まだ問題がある場合は、写真を投稿します。

0
Steve Rosenberg

ワークスペースの問題のようです。ワークスペースからプロジェクトを削除して、もう一度追加してみてください。それは私の場合に役立ちました。

0
P_O

Xcode 6.3を使用していますが、同様の問題が発生しました。最後に、.hファイルのいくつかの編集で問題が解決しました。インターフェースにIBOutletが定義されている場合

@interface NavigationViewController :UIViewController
{
  IBOutlet UILabel *lblName;
}

これを.mファイルに変更し、@ synthesize lblNameを追加します。

@interface NavigationViewController :UIViewController
{
   __weak  UILabel *lblName;
}

@property (nonatomic, weak) IBOutlet UILabel *lblName;
0
Ram G.

私はこれと同じ問題を抱えていましたが、リンクするビューアウトレットはありませんでした。私が修正できた唯一の方法は、XIBファイルの所有者クラスを「UIViewController」に変更し、リンクを作成してから、目的のカスタムView Controllerクラスに戻すことでした。リンクは維持され、すべてが順調でした。

0

(スクリーンショットの)ストーリーボードのメニューからアウトレットを削除して、要素からもう一度ドラッグしてみてください。

0
Antoine

私はこれと同じ問題を抱えていました。

View Controllerのクラスとファイル名を変更したことがわかりました。ストーリーボードでは、右ペインの[カスタムクラス]-> [クラス]に古い値がありました。そのため、欠落しているクラスには何もなかったため、IBOutletsは整列しませんでした。これは、定義されたアウトレットを見つけることを期待していた場所です。

右ペインの[カスタムクラス]フィールドにView Controllerの正しいクラス名を入力すると、問題が修正されました。

カスタムクラスフィールドに間違ったクラス名がある場合、XCodeはより詳細である必要があります。

0
styler1972

私はこれを持っていて、私のマシン上のすべてのプロジェクトに影響を与えましたSwift and Objective Cそして長年私を怒らせました。また、クラスの名前を変更するためにリフレクターを使用できないことに気付きました。

私にとっての修正は:

  1. Xcodeを閉じる
  2. 〜/ Library/Developer/Xcode/DerivedDataを削除します(これを単独で実行しても機能しませんでした!!)
  3. すべてのプロジェクトを含むディレクトリから以下を使用して、すべてのプロジェクトのすべてのユーザーデータを削除します。/src(このコマンドには注意してください!):

見つける。 -name 'xcuserdata' -exec rm -rf {} \;

手作業で行う場合は、すべてのプロジェクトで次を実行してください。xcodeproj/project.xcworkspace/xcuserdataを削除します。xcodeproj/xcuserdata/.xcuserdatadを削除します

  1. Spotlightを入手して、すべてのプロジェクトが実行されていたドライブのインデックスを再作成します(これが必要かどうかわからない
  2. マシンを再起動します

すべてが生き返った!

0
Tim Teece