13

これは本当の「WTF?」です。私にとっての瞬間。

コードといくつかの UIBulder コンポーネントをコピーして貼り付けるなど、別のプロジェクトからいくつかのクラスをコピーしました。コピーされなかったのはXIBファイルでした(XIBからストーリーボードに移動しました)。

私のタブ/スワイプ認識機能がアクティブ化されていません。掘り下げてみると、それを説明できる唯一の発見は、どういうわけか、何らかの形で XIB ファイルに接続しているということです。(ヘッダーの IBAction/IBOutlet 行の横にある小さなボタンをクリックすると、ストーリーボードと xib ファイルの両方が接続済みとして表示されます)。

そのファイルをどこでも参照しているわけではなく、Xcode で魔法のように認識されているだけです。どうすればいいのか、これを修正する方法がわかりません。

誰にもアイデアはありますか?

編集:本当に厄介なのは、ファイルをチェックしたときにファイルリストにファイルが表示されないことです。そのように参照を削除することはできません。元のプロジェクトのファイルを参照しているため、単純に削除することはできません。(いずれかのプロジェクトで変更を加えると、両方のプロジェクトが変更されます。どちらも何らかの理由で同じ xib ファイルを使用しています)。xib ファイルへの参照を単純に削除できるはずですが、参照が見つかりません。

4

4 に答える 4

15

ビュー コントローラーのコードをあるプロジェクトから別のプロジェクトにコピーすると、アウトレットで奇妙なことが起こることに気付くでしょう。アウトレットを接続することなく、最初のプロジェクトからのビューを参照しています。

ここに画像の説明を入力

小さな円を左クリックして参照リンクをクリックすると、他のプロジェクトのストーリーボード ビューに移動することさえできます。この参照を取り除く方法を理解しようとすると、気が狂ってしまう可能性があります。

幸いなことに、修正する必要はまったくありません。深くて見つけにくい参照リンクをコピーしませんでした。View Controller とアウトレット名が両方のプロジェクトで同じであるため、Xcode は混乱しています。基本的に、その小さな円の言うことは無視してください。最初のプロジェクトを閉じると、Xcode が最終的に問題を解決します。ストーリーボードでビューを右クリックして、現在のプロジェクトに実際に存在する参照アウトレットを確認します。(詳細については、私の完全な回答を参照してください。)

派生データを削除する必要はありません。とにかく問題は解決しません。両方のプロジェクトをもう一度同時に開いてみると、同じ奇妙な動作が発生します。

私がこれを理解した方法は、同じ名前のビュー コントローラーと同じ名前の参照アウトレットを持つ 2 つの新しいプロジェクトを別々に作成することでした。私は何もコピーしませんでしたが、Xcode は一方が他方を参照していることを示しました。私が言ったように、小さな円は無視してください。

于 2016-05-19T13:39:48.843 に答える
13

私はちょうど同じ問題を抱えていました。私にとってそれを解決したのは、両方のプロジェクトを閉じ、両方から派生データを削除してから、宛先プロジェクトを再度開くことでした。

私は同意します、それはクレイジーな問題です。

于 2013-12-04T19:00:30.840 に答える
3

この問題が発生する可能性があると確信しており、XCode の Derived data フォルダーの内容を削除して修正しました。

これらのファイルを削除する方法の手順を追加したいだけです。

  1. DerivedData フォルダーを削除しないでください。
  2. 環境設定 (Command ,) > [場所] タブに移動します
  3. 派生データで、パスが表示されます。右向きの矢印をクリックします (Finder でその場所が開きます)。
  4. XCode を閉じる
  5. DerivedData フォルダー内のすべてのファイルを選択し (親フォルダーを選択しないでください)、(Command Delete) か、それらをゴミ箱に移動してからゴミ箱を空にします。
  6. プロジェクトを開くと完了です

それが誰かに役立つことを願っています

于 2013-11-25T14:12:54.000 に答える
1

xibファイルがプロジェクトにない限り。それへのリンクがあってはなりません。

xibファイルは.hファイルに接続します。その逆ではありません。

ストーリーボードの接続を削除して、再接続することをお勧めします。

また、ストーリーボードが開始中のUIであり、ナビゲーションスタックのアイテムが実際にストーリーボードページであることを確認してください。ただし、ストーリーボードとxibファイルの両方を同時にクラスに接続できる必要があります。1つのUIコンポーネント内の複数のオブジェクトに1つのIBOutletを接続することはできません(たとえば、ストーリーボードの2つのボタンを両方に接続することはできませ@property IBOutlet UIButton *myCurrentButtonん。接続ごとに個別のIBOutletを用意する必要があります。一方、任意の数のアクションを接続できます。 IBActionに移動します。これが(id) sender、各アクションに参加する理由です。

これがまさにあなたが経験していることであるかどうかはわかりませんが、理解が問題のデバッグに役立つことを願っています。

于 2012-08-22T18:51:27.807 に答える