web-dev-qa-db-ja.com

Xcode 6バグ:Interface Builderファイルのクラスが不明

私はXcode 6 Beta 4にアップグレードしました、そして今私のアプリは継続的にメッセージでクラッシュします

Interface Builderファイルに不明なクラスXがあります。

XcodeがStoryboardでリンクしたカスタムクラスを見つけることができなかったためにクラッシュしましたが、Xcodeインターフェイスでそれらが正しくリンクされていることがわかりました。

私はすべてが正しくリンクされていることを確信しています。私の他の唯一の選択肢は、ストーリーボードファイル全体を削除し、それが何らかの理由で破損している可能性があるため、最初から始めることです。

編集:私はまた、私が掃除し、シミュレータをリセットし、ビルド段階をいじってみたことを追加したいと思います。

567
Epic Byte

私が質問をタイプしていたので、私はこの問題を解決しました。私は自分の質問に答え、Xcode 6 Beta 4を使用しているときにこの問題に直面する可能性のある他の人のためにここに残しておくと考えました。

この問題を解決するには、ストーリーボードで各カスタムクラスオブジェクトを選択する必要があります(これにはカスタムビューが含まれます。カスタムView Controller自体も含まれます)。

次に、それらのオブジェクトを選択した状態で、アイデンティティインスペクタを開くと、「カスタムクラス」の下に「モジュール」オプションが表示されます。 Moduleテキストボックス内をクリックして、Enterキーを押します。

それでおしまい!私のすべてのカスタムオブジェクトの現在のモジュールは、Xcode 6 Beta 4では何らかの形で内部的に正しく設定されていなかったにちがいありません。

[モジュール]テキストボックス内でEnterキーを押しても機能しない場合は、右側の矢印を選択して現在のモジュールを手動で選択し、テキストボックスをクリアしてEnterキーを押します。クラステキストボックス内でEnterキーを押すこともできます(これは通常別の問題を解決するためです)。

これは、物事をより明確にするためのイメージです。 enter image description here

1374
Epic Byte

時々Xcodeは逃しましたcustomModule="AppName" customModuleProvider="target"

修正するには、ストーリーボードをソースコードとして開き、次の行を置き換えます。

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

これに:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
96
ChikabuZ

私はSwiftクラスの名前を変更した後にこの問題を抱えていました。 @objcディレクティブを使用して解決しました:

@objc(ForumTopicListViewController) class ForumTopicListViewController
70
user1760527

これは私のために働きました..

そのファイル(例えばViewController.m)が追加されているかどうか、コンパイルされたソースを確認してください。

enter image description here

54
mavericks

複数のターゲットを持つプロジェクト

私の場合は、複数のターゲットを使用してプロジェクトに取り組んでいますが、「ターゲットからの継承」のチェックが外されていました。 「ターゲットから継承」を選択すると問題が解決しました

enter image description here

53
Muhammad Nayab

これは6.0以上のXcodeで起こります。 SwiftプロジェクトでいくつかのViewControllerクラスの名前を変更した後に私に起こりました(しかし、それはObj-Cでも起こるでしょう)。インターフェイスビルダーを開き、クラスの名前が変更されたViewControllerのIdentity Inspectorに移動し、クラスを選択してEnterを押すだけです。これにより、名前を変更したクラスを選択したViewControllerに再割り当てし、クラス名を変更すると失われるモジュール値もリセットされます。

Xcode 8.1用にアップデートします(おそらく8.0もそうです):

Xcode 8.1がクラッシュしました。単純にそして厄介なことにクラッシュするだけで、何も印刷されません。私はそれがまさに同じことであることを知るために1時間そのファントムクラッシュを追いかけていました - IBの未割り当てクラス。いくつかのファントムクラッシュが発生した場合は、最初に割り当てられていないクラスのIBを確認してください。

44
jovanjovanovic

時々あなたが提供しているコントローラーは現在のアプリケーションからそのターゲットメンバーシップを失います。その場合、 "Module"フィールドでenterを押しても何もしません。コントローラに移動して、ターゲットメンバーシップが現在のアプリに設定されていることを確認します。

32
Furqan Khan

私の答え:添付のスクリーンショットのように、カスタムモジュールをカスタムPod名(私の例ではカスタムクラス名)に設定します。

Pod (または Carthage )フレームワークのカスタム views クラスの場合、この解決策は 特定の場合 の場合です。

インフラストラクチャ:XCode8、Swift3

enter image description here

27
Tamara

私はChikabuZが提案したことと正反対のことをすることでそれを修正しました(それを指摘してくれてありがとう)。ストーリーボードファイルで、これを見つけます。

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

そしてこれでこれを置き換えます。

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

SwiftコンパイラとXcode 6のバグを回避するのに何時間も費やしているとは思えない

16
Orlin Georgiev

私のCustom Classに適切なModuleを選択する私はこの問題を解決しました。

ここにあります :

enter image description here

15
roy

Xcode 8 でこの問題に直面しました。それを解決するには、テキストエディタでストーリーボードを修正する必要がありました。

一般に、あなたのコントロールを調べ、コントロールエンティティからcustomModulecustomModuleProviderを削除します。

私のためにトリックをしました。

13

あなたのクラスが正しい ターゲットメンバーシップ を持っているか確認してください。

9
Jakub Truhlář

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

私の場合、Xcodeは私のカスタムクラスを追加していませんでした:Target> Build Phase> Compile Sources。

だから私はあなたのCustomClass.mがそこにあるかどうか確認することを勧めます。

enter image description here

これがお役に立てば幸いです。

9
rcmstark

プロジェクトからMain.storyboardLaunchScreen.xibファイル、およびデフォルトのViewControllerクラスを削除したときに、Xcode 6.1でこの問題に直面しました。

Launch Screen FileからMain InterfaceInfo.plistのエントリを削除して修正しました

9
Vinay Jain

私はこれのためにいたるところでグーグルしました。私のプロジェクトフォルダをデスクトップに移動するように依頼された1人の男に会うまで、答えはどれも私のために働きません。それは自動的に動作しました。どうやらあなたがたくさんのフォルダの中に深くフォルダを投影してもらうならば、XCODEは実際に壊れます。

8
VBaarathi

これを解決するために、ストーリーボードファイルをソースコードとして開き、command-Fを使って未知のクラスを検索し、それに関連するカスタムクラスを削除しました。

7
Wraithseeker

これらのステップは私のために働きます。

1)派生データを消去します。
2).hファイルと.mファイルを削除します
3).hファイルと.mファイルをもう一度作成する

7
ARWIN

私の解決策(Xcode 8.1 Swift 3.0):

Interface Builderファイルで不明なクラス xxx

ソースコードとしてStoryBoardを開き、 xxx を検索します。値 xxx を含む属性を削除してください。ビルドして実行します。

6
ibrahimyilmaz

私はこの問題を解決するために、すべてのViewコントローラとビューのIDインスペクタのカスタムクラスにモジュール名(ドロップリストには何も表示されません)を入力しました。

あなたはまたターゲットプロバイダーを示す必要があるかもしれません。この目的を達成するには、ストーリーボードをソースコードモードで開き、ViewControllerとViewの山括弧の両方に "customModuleProvider"属性を追加します。

6
Teng Long

@ gfrsが言ったことは正しいです、あなたはモジュールを設定する必要があります。しかし、私はかつて私のクラスがClassドロップダウンにリストされていないという問題に遭遇しました。最終的に私はSwiftファイルを削除し、Xcodeを再起動してファイルを再作成しました。最後にクラスがリストされ、ストーリーボードで使用することができました。

また、 この答え を見てください。これは、私が遭遇した「本当の」問題を解決するようです。

6
bouke

私の場合は、それを機能させるためにプロジェクト設定でフラグ-ObjCOther Linker Flagsを追加しました。また、私は-all_loadフラグで試してみました、そしてそれは同じくうまくいきました。

enter image description here

私の場合、Storyboard/xibで参照されている class には Target Membership setがありませんでした。

修正するには、そのクラスの.hおよび.mファイルに他のクラスと同じターゲットメンバーシップを与えます。

No target membership set.

3
pkamb

Inherit Module From Targetを有効にすることは正しいターゲットモジュールを取りました。これで問題は解決しました。

enter image description here

3
Arnab Hore

ストーリーボードをSwiftプロジェクトからObjective-cプロジェクトに移植したとき、私は問題に直面しました。 vvkuznetsov's answer に気付きましたが、2つのプロジェクトは同じ識別子を使用していました。 I "Product - > Clean"をクリックして、Module and ClassテキストフィールドのEnterキーをタップします。問題は解決しました。

2
xhg

私はLauraが提案したことに沿ってこれを直しました、しかし私はファイルを作り直す必要はありませんでした。

XCode 4を使用して、プロジェクトナビゲータで、文句を言っているクラスを含む.mファイルを選択します。

[表示] - > [ユーティリティ] - > [ファイルインスペクタを表示]をクリックします(これにより、ファイルインスペクタが右側に表示され、その.mファイル情報が表示されます)。

Target Membershipセクションを開き、この.mファイルにターゲットが選択されていることを確認してください。

私のプロジェクトに.mファイルを追加したとき、なんらかの理由でデフォルトのターゲットに追加されなかったため、あなたが言及したエラーが発生しました。

2

私の解決策は、カスタムクラス定義から@objcを削除することでした。

2
danidarko

私の問題はユーザーエラーでした。私は自分のストーリーボードとアイデンティティインスペクタのカスタムクラスセクションに汎用のUIViewを持っていましたが、誤ってUIViewからgibberishに名前を変更していました。

修正に要したのは、それをUIViewに戻すことだけでした。

1
Scooter

解決策は私にとっては違いました。ターゲットのビルドフェーズでコンパイルされたソースにクラスの.mを追加する必要があります。

お役に立てれば!

1
Ruud Visser

新しいターゲットを追加し、[新規ファイル]ダイアログを使用して新しいクラスを作成した後にこの問題が発生しましたが、作成ダイアログで新しいターゲットと元のターゲットを誤って確認できなかったため、オブジェクトは自分に追加されただけです。元のターゲット解決策は、ソースファイルを削除し(参照を削除するだけ)、 'Add Files'を使用してそれらを追加し直し、今回は両方のターゲットをチェックすることでした。

1
JulianSymes

私にしか効かなかったのは、実際にはxibファイルにモジュール名を追加することです...

そう、xibファイルは次のようになります。

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

私の考えでは難しい解決策だが、それがAppleが私たちに今それをやらせることを望んでいる方法だろう。

この質問はベータ4に戻る3つの可能な回避策を示しています ...どうやらAppleは意図したとおりに動作すると言っているのでこの状況ではあまり役に立ちませんでした。

1

Xcode Version 6.1(6A1052d)でも同じ問題がありました。 App/Xcodeプロジェクトの名前を変更した場合、問題が発生すると思います。

私の解決策は手動でインターフェースビルダーにモジュール名を追加することでした。

1
patrickS

未知のクラスファイルを選択し、ファイルインスペクタタブを開き、Target Membershipでターゲット名を確認してください。そこに行きます。

1
Nix Wang

スイフト3 ソリューション。

これらはすべてうまくいきませんでした。

  1. 右ペインのModuleをクリックしても機能しませんでした。
  2. @objを追加してもうまくいきませんでした。
  3. 再起動は機能しませんでした。
  4. Xcodeが長いパスを切ってデスクトップに移動するのはうまくいきません。 ...

これはついにうまくいった。

新しいディレクトリを作成して新しいプロジェクトを作成する その中に/。 Main.sotryboard以外のファイルを追加します。

前のプロジェクトからView Controllerをコピーして、新しいMain.storyboardに貼り付けます。

ほら!これはうまくいきます。

0
mythicalcoder

私の問題はpodfileフレームワーク(特に 'BWWalkthrough')に関連していました。上記の解決策のどれも私のためにうまくいきませんでした、そして私がどのように試みたとしても私はモジュールが私のアプリを指すことができませんでした。

私にとってうまくいったのは、そのライブラリをpodfileとして削除し、それを静的ライブラリとして私のプロジェクトに直接追加することでした。それ以降、私にとっては何もかもがっしりしたものでした。クラスのポッド実装で何が「壊れた」のか完全にはわからない。

0
Simon

私はPyObjCユーザーで、私はNSViewサブクラスをそれ自身のファイルに持っていました。私にとってこの問題を解決したのは、NSViewサブクラスをそれ自身のファイルから私のAppController.pyファイルに移動することでした。これは、アプリケーションコントローラを含むファイルです。

0
user1766438

私は同じ問題を抱えていましたが、同じ問題は解決していません。

プロジェクトフォルダが壊れていたので、自分のプロジェクトフォルダを別のフォルダ、たとえばデスクトップにコピーし、その後プロジェクトを開いてください。

それが開いたときあなたのインターフェースビルダープロジェクトに行き、あなたは彼があなたのスクリプトを認識するのを見るでしょう、そしてあなたが実際にあなたのスクリプトの名前をクリックしそしてエンターを押すと、u.

そしてそれは魅力のように働くでしょう! :D

0
Jippe Joosten

私にとっては、Xcode 7 + Swift 2を使用しています

私のコードをチェックすることによってこの問題を解決しました、私は私のviewControllerにこの行を持っています:

 self?.navigationController?.pushViewController(vc, animated: true)

それから、navigationControllerが詳細ページに接続されていないことに気付きました。そのため、カスタマイズされたIDを使用して新しいViewControllerをプッシュする場合は、それを確認してください。

0
Chong Guo

プロジェクトディレクトリにすでに存在しているのと同じ名前のプロジェクトを作成したときに問題が発生しました(ただし、しばらく前に削除されました)。私はそこに私の解決策を書いた https://stackoverflow.com/a/27763697/1654692

0
vvkuznetsov

何も 他にはなかったときにこれは私のために働いた。ターミナルのプロジェクトディレクトリから:

[~/Developer/MyProject] grep -rn ViewController * | grep -i xib 

一致したファイルをXcodeのソースコードとして開き、ViewControllerのインスタンスを実際に必要なものに変更します。私の場合、ソースとして開く必要があるファイルはMain.storyboardで、ViewControllerのインスタンスをDetailViewControllerに変更しました。

私はXcodeとmain.storyboardから2つのファイルを削除しました。

0
N R

私のクラスは@objcでマークされていてストーリーボードではモジュールが見つからなかったために起こりました。 @objcを削除すると問題が解決しました

0
aryaxt

「myapp」にファイルを追加しても、Xcode 6.3で同じ問題が発生しました。これは、「グループの作成」ではなく「フォルダ参照の作成」を選択したためです。これらのファイルを削除し、「グループの作成」オプションを使用して再度追加します。問題は解決しました。

0
wj2061

XCode 10が「デバッグを改良する」のをやめたとき、これは本当に悪かったです。
私の場合は、Storyboardを使ってUITableViewDelegateとUITableViewDataSourceを設定し、それらの必須メソッドを実装するのを忘れていました。
これらのメソッドを実装する前に、まずビューをテストしてからクラッシュさせたかっただけです。 XCode 9はこれらのメソッドについて警告しますが、XCode 10は本当に私のコードを遅くしてしまいました。
これが誰かに役立つことを願っています。
ありがとう

私の場合は、アプリをユニバーサルアプリとして設定しているので、xcodeは2つのストーリーボードを作成します。と問題を解決するためにiPad.appでアプリを実行しようとするだけでiPhoneのためだけにアプリを作る必要があり、素晴らしい作品。

0
bLacK hoLE

私にとっては、ストーリーボードのカスタムクラス(.hファイルに対応)を参照していましたが、.mファイルに@implementationコマンドがありませんでした。

0
theDuncs

私のプロジェクトは "ä、ü、ö"で呼ばれたので私にはそれが起こった

0
SwiftNewling

プロジェクト名にスペースを使用しないでください。そうしないと、カスタムクラスは自分のクラスを見つけることができません。

0
bob woodwind

私は春のクラスで遊んでいました。そして、このエラーは私に起こりました。グループを作成する代わりに、フォルダクラス全体をプロジェクトに移動するときに、フォルダを参照として使用したためです。だからこれは私の解決策だった、参照としてフォルダを使用しないで、グループを作成してください。

0

私は私の新しいビューベースのプロジェクトからすでに含まれているViewController.hとViewController.mファイルを削除し、ストーリーボードからこのクラスに関連するシーンを削除すると、Xcode 6でこのような問題に直面しました。したがって、[ウィンドウ] - > [プロジェクト] - > [あなたのプロジェクト]に移動して派生データを削除しようとすると、すべてうまくいきます。

0
JAHelia

私の場合、問題はメインストーリーボードを起動画面に設定したことが原因でした。ストーリーボードで参照されているすべてのカスタムView Controllerについて、アプリケーション起動時にコンソールエラー(クラッシュなし)が発生します。

私たちはXIBからカバーして絵をストーリーボードに送り出しました、そして私はまだ起動画面が再び動くようになることに戸惑っていませんでした。私がようやくカスタムView Controllerのない(許可されていない)ベアボーン起動ストーリーボードを作成するようになったとき、これらのコンソールエラーは現れなくなりました。

0
Eric McNeill

Mijの場合、ViewController.h/mはlibの中にあります。プロジェクトはまだビルドされていますが、Xcode 6.3以降、上記のエラーが実行時に表示されました。両方のファイルをプロジェクトに戻すことで問題は解決しました。

0
OnTwoWheels