web-dev-qa-db-ja.com

インターフェイスビルダーの不明なクラス

私はこの主題に関して多くの質問があることを知っていますが、私はそれらのほとんどを試みて、成功せずにそれを理解しようとしました。

問題:最初は、アシスタントエディターからクラスを追加できなかったため、カスタムクラスがそれを取得しなかった。

  1. 呼び出しがuiviewcontrollerから継承することを確認しました
  2. クラスがターゲットに追加されたことを確認しました
  3. クラスファイルを削除して、再度追加しようとしました
  4. 最後に、ストーリーボードxmlを介してクラスを追加し、カスタムクラスに表示されました

現在、ボタン、ビューなどをコンセントに接続しようとしています。接続されているように見えますが、アプリを実行してそのView Controllerを開くと、アプリがクラッシュし、「Interface Builder fileのUnknown class xxx」というデバッガが出力されます。 「このクラスは、キーbtnMenuのキー値コーディングに準拠していません。」

私はチェックしました:

  1. その接続インスペクターが適切に設定されている(そこのコンセントにエラーがない)
  2. 派生データを削除しようとしました
  3. クリーンプロジェクト
  4. アプリを再インストールする

Macを再起動しようとしても、もちろん成功しませんでした。

誰でもここで光を遮ることができますか?ありがとう。

30
Max

UIViewControllerサブクラス(Xcode 9ベータ2およびSwift 4)を使用)でこの問題が発生したばかりで、ソリューションはIBでカスタムクラスを設定する「ターゲットから継承」をチェックすることでした。

ビューがたまたま.bundleファイル(フレームワーク/静的ライブラリなど)を別のターゲットにコピーする場合、xib/storyboardクラスをホストしているターゲットから継承するのではなく、各xib/storyboardクラスに明示的なモジュールターゲットを設定する必要があります。

80
Anthony Scott

私にとって問題は、クラスがターゲットメンバーシップの一部ではなかったことです。クラスをターゲットに追加するだけで、インターフェイスビルダーに表示されます。これは私の場合に役立ちました。

enter image description here

21
Mr. Desai

View Controllerセクションのカスタムクラスで「ターゲットからモジュールを継承」というチェックマークをチェックした後、正常に動作します。画像をフォローできます。

これを見つけるには、ビューコントローラーの黄色いボタンを選択します> [Show Identity Inspector "> [チェックマーク"ターゲットからモジュールを継承 -)」

enter image description here

7
Shihab Uddin

クラスをViewControllerに割り当てようとしている場合は、作成したクラスがUIViewControllerを継承していることを確認してください。 xCodeがクラスを認識しない唯一の理由は、それが異なるタイプのインスタンスである場合、たとえばUITableViewControllerタイプである可能性があることです。

最初にクラスの継承を確認してください。

2
Natasha

UIViewがフレームワーク内にある、テストしていたカスタムUIViewでこの問題が発生しました。シンプルなアプリを作成し、ストーリーボードのデフォルトのViewControllerにUIViewを作成し、そのクラスをMyCustomViewに設定しました。アプリの起動時に、常に「インターフェイスビルダーの不明なクラス」エラーが発生しました。フレームワークをインポートし、ビルドされた製品にフレームワークがあることを確認しました。

問題は、テストアプリのコードが実際にフレームワークを使用しなかったことです。ストーリーボードがそれを参照していても、ロードされなかったと思います。テストアプリのコードに[MyCustomView load];を追加すると、すべて機能しました。

2
Ben

Framework_AがFramework_Bに依存し、クラスがFramework_Bから派生するま​​で、@ Anthony Scottが言ったことは真実です。次に、チェックボックスを選択解除し、指定されたクラスを含むモジュールを提供する必要があります。ところで質問をありがとう。他のフレームワークにCommonsフレームワークを使用していますが、これを実現するのに役立ちました;)カスタムCocoa Touchフレームワークを開発している人にとって、これは役に立ちます。

2
travdu

クラスファイルを作成したときに誤ってBase.lprojフォルダーに保存したため、このエラーが発生しました。

Project Navigatorでファイルを右クリックし、その参照を削除して、エラーを修正しました。その後、Finderを介してファイルを正しいフォルダーに移動しました。次に、Project Navigatorでメイングループを右クリックし、Add Files to "GroupName"...とクラスを選択し、Addボタンをクリックしました。

その後、エラーはなくなりました。

1
jhonkaman

わかりましたので、どのように、なぜわからないのですが、私は(もう一度)以前に試したことをしました:

  1. クラスを削除する
  2. 新しい名前で同じクラスを作成する
  3. シーンを削除し、ストーリーボードで再作成しました
  4. すべてを接続しました(同じ通常の方法で!!!)

今ではXcodeが私のクラスを知っているようです....私はまだ何が問題だったのか分かりませんが、リンカーと関係があると思います。

1
Max

カスタムクラスを使用してView Controllerをインスタンス化する必要があります。それがなければ、エラーが発生する可能性があります。

self.storyboard!.instantiateViewController(withIdentifier: "namePage") as! EmailAndPassword
0
Aaron Zheng

クラスの名前を確認してください。プロパティインスペクターでViewControllerを割り当てたクラスに対応していることを確認してください。

0
Mo Iisa

これは役に立たなかった。私の問題は、カスタムストーリーボードを作成し、カスタムクラスを追加したことです。しかし、自動生成されたメインストーリーボードから初期ビューコントローラーの矢印を取得するのを忘れ、初期のストーリーボードをカスタムストーリーボードに変更して修正しました。

0
sibin