Xcode 4:UIView xibを作成しているが、正しく接続されていない


84

TableViewCellに埋め込まれるビューを含むペン先を作成しようとしています。私は、インタフェースと実装ファイルを作成し、しましたResultCell.hResultCell.m。それらは在庫があり、すぐに使用でき、コードの変更はありません。

次に、空のXIBファイルを作成し、UIViewをそのファイルにドラッグします。次に、[ファイルの所有者]をクリックして、タイプをに設定しResultCellます。ビューをクリックし、そのクラスもに設定しますResultCell

これが私が抱えている問題です:

  1. (私が住んでいる)Assistant Editorビューを使用している場合ResultCell.h、ResultCell.xibファイルを表示しているときにファイルが表示されません。[自動]をクリックしてファイルを選択し、強制的にロードする必要があります。
  2. ビューにラベルをドロップし、Ctrlキーを押しながらクリックして.hにドラッグしてコンセントを作成すると、次のエラーメッセージが表示されます。「新しいコンセント接続を挿入できませんでした ResultCellという名前のクラスに関する情報が見つかりませんでした。 「」

ビューを作成して再作成しようとしましたが、機能していません。忍耐力を失い始めました。どんな助けでも非常に、非常にありがたいです!


私は自分でこれに遭遇しました。昨夜はうまくいきましたが、今日は何もありません。何か見つけたらお知らせします。
タビソン2011

記録として、ここでの複数の回答は、昨年私を助けてくれました。Xcodeの最近のバージョンでは、改善されています。
ティムサリバン

回答:


82

これは特定の問題では機能しない可能性がありますが、新しく作成されたペン先を操作するときにエラーが発生することがあります。以前と同じ名前のnibとViewControllerを削除して再作成しても問題は解決しませんでしたが、Xcodeを再起動しても問題は解決しました。


+1私も働いた。XCodeを再起動するだけで、CTRL +ドラッグして.hファイルに新しい@propertysを作成できます。
Mike Gledhill 2011年

1
デビッドピゾーニの答えは私のために働いた。Xcodeを再起動するだけでは、マスタードはカットされませんでした。
アンディ

現在、多くのXcodeリリースでこの問題が発生していないため、昨年この回答を書いたときに経験した原因よりも、現在は別の原因が蔓延している可能性があります。
2012年

@Defraggedは、引用する前にコマンドKを押してキャッシュをクリアする手順を含めることもできます。または、Xcodeを終了してからキャッシュをクリアすることもできます(~/Library/Developer/Xcode/DerivedData
user1046037 2013

XamarinStudioを使用しています。xcodeとxamarinstudioを終了してから、Xamamrin Studioを再度開き、ここからxcodeで起動したxibファイルを開く必要がありました。その後、アシスタントエディタが正しく開きました。
Dave Haigh 2013

113

今日も同じような状態になりました。それは非常に奇妙なことでした。プロジェクト内の既存のViewControllerクラスに(新規または既存の)XIBをアタッチできましたが、新しいViewControllerを作成してXIBに正しくアタッチすることはできませんでした。「アシスタント」機能は機能せず、IBからヘッダーファイルへの接続機能も機能しませんでした。

プロジェクトを閉じて再度開くと、修正されませんでした。
XCodeを終了して再起動しても、修正されませんでした。
新しいプロジェクトを作成し、機能をテストすることはうまくいきました。そのため、どこかのキャッシュに何かが壊れていると思いました。

私の解決策

  • プロジェクトを閉じます。
  • 〜/ Library / Developer / XCode / DerivedDataフォルダーに移動し、作業中のプロジェクトを参照しているすべてのサブフォルダーを削除します。
  • XCodeでプロジェクトを開きます。この問題は今すぐ修正する必要があります。

ちなみに、フルクリーンを実行しただけでは問題は解決しなかったようです。派生データを破棄する必要がありました。私がプレイしていたgitゲームのおかげでこの位置に着いたことは確かですが、以前のgitリビジョンに切り替えても役に立たなかったため、どうやって抜け出すのかわかりませんでした。(それは、プロジェクト自体によって追跡されていないものであったことも大きな手がかりでした。)


6
MacでSOにログインしたばかりなので、この回答に賛成することができました。完全に私のために働いた。私はXCodeの使い方を学んでいるだけで、このようなばかげた問題がなければすでに十分に難しいので、これは私を夢中にさせました。:) ありがとうございました!!!
デイブ

2
xcodeを再起動しなくても機能します。派生データを削除して再構築するだけです(iOSプロジェクトの場合)
2012年

これは、xcodeを再起動しても機能しなかった場合に機能しました。デビッド・ピゾーニの方法がどのようにうまくいったのか私にはわかりません。
mmopy 2012

驚くばかり。どうやってそれを知ったのですか?私のために働いた。
hol 2012

1
笑IOSとxcodeは、EclipseとAndroidを使用するよりもバグが多いとは言えないことを知っておくとよいでしょう:p
James andresakis 2012年

14

この問題が発生しましたが、Xcodeを再起動しても修正されませんでした。プロジェクトからクラスファイルを削除してから再度追加すると、機能し始めました。


13

私はまったく同じ問題を抱えていました。そして私は試しました:

  • Xcodeを再起動します
  • 派生データの削除
  • などなど

それはどれもうまくいきませんでした。私のために働いたのは単に:

  • プロジェクトから「疑わしい」クラスファイルを削除します(参照を削除するだけですよね?)
  • それらをプロジェクトに再度追加します

そして完了!


2
これは私のために働いた、ありがとう!XCodeを再起動する以外に、最初に試したのは、作業量とリスクが最も少ないように見え、うまく機能したためです。
adriandz 2012

1
xcodeを再起動し、派生データを削除した後、私のために働いた
elad s 2013

1
これは私にもトリックをしました。これは、クラス名のリファクタリングと関係がある可能性があります(これは私が以前行ったことです)。
環境税2013

9

Xcodeを再起動してもうまくいかない場合は、新しい.mファイルを切り替えてターゲットメンバーシップに戻すことができます。


3

これは私を助けました:

  1. プロジェクトファイルパネル(左側)から、壊れているxibファイルを選択します。
  2. エディタビューから[ファイル所有者]アイコンをクリックします。
  3. プロパティパネル(右側)から3番目のタブ(上部)を選択します
  4. 「カスタムクラス」を指定します

「パネル」が表示されない場合は、ウィンドウの右上隅を見て、適切な「表示」ボタンを有効にしてください。「表示」ボタンが表示されない場合は、右上のカプセルボタンをクリックしてください。


最近、クラス名を変更(リファクタリング)しました。この回答で言及されているカスタムクラスは、まだ古い名前に設定されていました。新しい名前に変更し、修正しました。
PaulMrG 2013

2

.mファイルがen.lprojフォルダー内に移動されていることに気づきました。

Xcodeから.mファイルを削除(参照のみ)し、en.lprojから.mを移動するだけです。もう一度追加すると、問題が修正されます。

心配しないでください、あなたはあなたのすべての接続を取り戻すでしょう。


私の.mは自動生成されましたが、まだ変更していません。私はやった、そしてすべてが大丈夫だった。他に何も機能していませんでした。
entonio 2013

2

今日も同じ問題が発生しました。XCodeを再起動しても、問題は解決しませんでした。オーガナイザーの下にあるプロジェクト「派生データ」「削除」オプションを使用することで、通常の状態に戻すことができました。主催者は、「派生データにはインデックス、ビルド出力、ログが含まれています」と述べています。インデックスまたはビルド出力のいずれかがこの問題の原因であったと思います。


2

XCodeでオーガナイザーに移動し、プロジェクトをクリックし、派生データの削除をクリックします...プロジェクトをクリーンアップするよりも


2

私の場合、対応するヘッダーファイルに「偽の変更」(スペースのみ)を加えるのに役立ちました。


これは私にとってもそれをしたかもしれないと思います。私の場合、手動でコンセントを追加しました。その後、麺をそれに接続し、Ctrlキーを押しながらドラッグして新しいアウトレットを作成することができました。
ダニエルウッド

1
  1. ResultCellは次のサブクラスである必要があります UITableViewCell
  2. UIView空のキャンバスにをドラッグするのではなく、をドラッグする必要がありますUITableViewCell
  3. セルを選択して、サブクラスになるように変更する必要があります
  4. 所有者はほとんどの場合、セルへのコンセントを備えたコントローラーです

新しいセルをロードするたびに、次の呼び出しを行います。

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

ロード後、セルを使用し、ivar / outletをnilに設定して次のロードの準備をします

他の方法もありますが、これは一般的です


そうすると、まったく同じ問題が発生します。ペン先を表示しているときにアシスタントエディターに.hが表示されず、ctrl +ドラッグでアウトレットコードが作成されず、エラーが表示されます。
ティムサリバン

2
4.0.2 Xcodeを使用していますか?誤動作している場合は、アシスタントエディタを手動で設定できます。この問題を再テストするためにアプリを再起動したと思います(Xcode 4は多くの場合これから恩恵を受けます)。プロジェクト内でクラスファイルが見つからないか、名前が間違っているようです。大文字と小文字が重要です。プロジェクトは現在構築中ですか?これは、新しいコンパイラテクノロジに依存する非常に高レベルの機能です。
bshirley 2011

ああ、私をエフ。ええ、Xcodeを再起動すると、すぐに機能し始めました。「すみません、今から剣に倒れます。
ティムサリバン

1

おそらく私のために働いたのはこれです..(Xcode v4.5)

これはうまくいきませんでした

.hのインターフェイス定義へのドラッグを制御しようとしていました

@interface SearchViewController : UIViewController

@end

これは機能しました(それが機能するはずだったのかもしれませんが、以前は知りませんでした)開き括弧と閉じ括弧を参照してください。閉じたブラケットの後のドラッグアンドドロップを制御します。

@interface SearchViewController : UIViewController
{
}

@end

1

Swiftで書かれたプロジェクトでも同様の問題がありました。

私のために働いたのは、このようなコードでIBOutletを設定することでした

@IBOutlet var foo: UIView?

その後、コード行のすぐ隣に表示された小さな円にドラッグして、InterfaceBuilderに接続します。


これは私がそれを私のためにも働かせることができた唯一の方法です。私はObjective-C(iOSアプリの開発を今すぐ開始)用に書かれたAppleチュートリアルに従っており、[新しいTo-Doアイテム]テキストフィールドを接続する必要がありました。最後に、@ IBOutlet var textFieldを作成しました:UITextField?それに接続して、それは機能しました。XCode 6.4の使用
andrewz 2015

1

上記の回避策のいずれも私にとってコネクタの問題を解決しなかったので、次のスタックオーバーフロースレッドに遭遇するまでペットプロジェクトを棚上げしました:

https://stackoverflow.com/a/15873770/2846800

以前のバージョンのXCodeで大規模なプロジェクトに取り組んでいて、インデックス作成をオフにしていました。インデックス作成を再度有効にすることで、問題が修正されました。

defaults delete com.apple.dt.XCode IDEIndexDisable

これで、Interface BuilderのD&D機能を使用できるようになりました。これが他の人の助けになることを願っています...


1

この問題は、ファイルを同じ名前の新しいファイルに置き換えるときにほとんど発生するXcodeのバグのようです。Xcodeは、同じ名前の古いファイルの参照を保持しているようです。

とにかく、これを修正する方法は次のようです:

  1. プロジェクトをクリーンアップする
  2. プロジェクトナビゲータビューで(プロジェクト)をクリックします。ビルドするターゲットのビルドフェーズの下にある[ソースのコンパイル]に移動します。問題を引き起こしている.mファイルを削除して追加し直します。
  3. または、NIBファイルのファイルインスペクター(ユーティリティビュー)の[ターゲットメンバーシップ]で、ターゲット名のチェックを外してチェックし直します。
  4. Xcodeを再起動してください。
  5. もちろん、.mファイルだけを削除して追加し直すと、それも修正されるはずです。

(ステップ1と2だけで修正されました。)


0

他のプロジェクトからファイルをコピーした場合は、[ターゲットに追加]チェックボックスをオンにしてください。



0

同様の症状ですが、原因が異なります。

標準のファイルテンプレートのコメント行の1つが//から/になり、ファイルがコンパイルされないため、アシスタントビューにフォーカスがあったときにバックスペースを押したようです。

コメントを修正することで、SDKはファイルを解析し、UIViewControllerとして認識し、アウトレットに追加できるようになりました。

SO-この問題が発生した場合は、ビルドまたは分析を実行して、View Controller.hファイルで修正が必要なエラーがあるかどうかを確認してください。次に、他のソリューションを試してください。


0

これは古いトピックかもしれませんが、将来誰かが同じ問題を抱えている場合に備えて、関連する.xib、.h、および.mファイルを削除して新しいファイルを作成してみてください。私にとって、.hファイルのUIViewControllerは紫色ではなく、バックスペースして入力しても役に立ちませんでした。


0

@implementationと@synthesizeの間に線を引くだけです。ここでの答えのほとんどは、共通点があります。それは私のために働いた

@implementation 

@synthesize

0

ここですべてを試しましたが、何も機能しませんでした(Xcode 5の開発者プレビューを使用)。

私のために働いた唯一のことは、この不完全な行を私のインターフェースファイルに入れることでした:

@property (nonatomic, weak)

何らかの理由で、.xibからドラッグアンドドロップしてアウトレットとアクションを追加すると、その後は正常に機能しました。


0

私にとって、DerivedDataをクリーニングするか削除するかによって、問題は解決しました。

UIViewControllerクラスを何度か削除して再作成しようとしましたが、何度も問題が発生しました。

次に、UIViewControllerクラスを再作成し、別の名前を付けました。これは私にとって問題を解決しました。


0

私はこの問題を抱えており、上記にリストされていない解決策を見つけました。

私の場合、カスタムビューコントローラーがクラスUIViewControllerを認識しなかったため(紫ではなく黒でした)、クラス.hファイルに問題があることがわかりました。他のすべてのカスタムビューコントローラーには、紫色のUIViewControllerがありました。

私の場合、そしておそらくあなたの場合、クラスをターゲット/ビルドフェーズ/コンパイルソースドロップダウンに追加する必要がありました。.mを追加する必要があります。他のすべての.mはそこにありましたが、これはありませんでした。

追加すると、:UIViewControllerが紫色で表示され、すべてが正常に機能しました。


0

私の場合、他の依存関係を持つ複数のプロジェクトがあります。派生データを削除するか、XCodeを再起動して解決しようとしましたが、機能しませんでした。最後に、私は次の方法を試しましたが、うまくいきました。

ターゲット>ターゲットアーキテクチャのみのビルド>に移動し、デバッグとリリースの両方をNOに設定します。

ワークスペース内のすべてのプロジェクトにこれを設定し、再コンパイルして他のエラーがないことを確認します。多分意味がありませんが、どういうわけかそれをしました。コンパイル中に、リンカーエラーやシンボルが見つからないなどの他の問題が発生しました。


0

このクラスビューの* .mファイルの場合は、[ファイルインスペクターの表示]を開き、このプロジェクトの[ターゲットメンバーシップ]のチェックを外してから、[クリーン]([製品]-> [クリーン]メニュー)を実行し、このプロジェクトの[ターゲットメンバーシップ]をもう一度チェックします。

ここに画像の説明を入力してください


0

Swiftを使用して、私は同様の問題を抱えていました。コメントが私にとって問題の一部であることがわかりました。

デフォルトのViewControllerを利用し、そこでいくつかの作業を行ってから、最初のView Controller全体をコピーし、それをviewDidLoad()のみに削除し、クラスの名前をTestViewControllerに変更して、2番目のViewControllerを作成しました。ビルドが機能し、コードが実行されました。すべて良かった。

UITextFieldをドラッグしてアウトレットを作成しようとすると、それができませんでした。コメントにまだ「ViewController.swift」と表示されていることに気付いたので、コメントテキストを「TestViewController.swift」に変更して再構築しました。コンセントを接続できました!

インデクサーがクラス名だけでなくコメントも読んでいて、どういうわけか混乱してしまったのではないかと思います。


0

これが誰かを助けてくれることを願っています。

派生データフォルダを削除する必要がありました。[ウィンドウ]-> [オーガナイザー]-> [プロジェクト]-> [派生データの削除]をクリックする必要があります

XCODEを再起動します。

あなたは行ってもいいはずです!


0

これらの回答のいくつかが示唆しているように、「TARGET」の一部ではない新しいクラスがこれの根本的な原因である可能性があります。

新しいカカオクラスを作成するとき、デフォルトでターゲットに新しいクラスを追加するオプションがチェックされていますが、何らかの理由で、保存を押したときにこれがチェックされていない場合、この問題が発生します。

新しいクラスターゲット

アプリターゲットに新しいクラスを追加するこれらの回避策はいずれも、問題を解決するために機能し、これらすべての「修正」に共通するものです。

XCodeには、新しいファイルがデフォルトでアプリのメインターゲットに追加されない原因となるバグがいくつかある可能性が高いと思います。修正は、「壊れた」クラスをメインのターゲット追加することです。


0

XCode 7.1では、ソースファイルの別の場所にコネクタを追加することができました。変数の1つがクラスであるかのように参照されていたエラー(意味がありませんでした)。その変数の上ではなく下にコネクタを追加すると、エラーは発生しなくなりました。


0

この問題にはさまざまな理由もあります... ios以外のテンプレートを使用して新しいカカオクラスファイルを作成した場合...発生する可能性があります...

解決策は、それを削除し、適切なテンプレートで再作成することです ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.