web-dev-qa-db-ja.com

これは何を意味するのでしょうか? "'NSUnknownKeyException'、理由:…このクラスはキーXのキー値コーディングに準拠していません"

私は私のクラスで作成されたUILabelIBOutletをリ​​ンクしようとしています。

私のアプリケーションは次のエラーでクラッシュしています。これは何を意味するのでしょうか?どうすれば修正できますか?

***キャッチされていない例外 'NSUnknownKeyException'のためにアプリケーションを終了しています、理由: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:このクラスはキーXXXのキー値コーディングに準拠していません。

1099

あなたのビューコントローラはあなたのxibで間違ったクラスを持っているかもしれません。

あなたのプロジェクトをダウンロードしました。

あなたが得ているエラーは

'NSUnknownKeyException'、理由: '[<UIViewController 0x3927310> setValue:forUndefinedKey:]:このクラスはキー文字列のキー値コーディングに準拠していません。

これは、MainWindow.xibSecondビューコントローラのクラスが UIViewControllerではなくSecondView であることが原因です。正しいクラスに変更すると問題が解決します。

ちなみに、Objective-Cでは "string"のような名前を付けるのは悪い習慣です。それは実行時の命名の衝突を招きます。練習アプリから一度でもそれらを避けてください。命名の衝突は突き止めるのが非常に難しいことがありえます、そしてあなたは時間を無駄にしたくありません。

このエラーのもう一つの考えられる理由:あるコントローラから別のコントローラに要素をコピー&ペーストするとき、この要素を編集して新しいコントローラに再リンクした後でも、Xcodeはどうにかそのリンクを元のコントローラに保ちます。

このエラーのもう一つの考えられる理由:

悪いアウトレット.

.hファイル内のアウトレット名を削除するかリネームしてください。

.xibまたは.storyboardファイルのConnection Inspectorで削除してください。

911
TechZen

あなたはあなたのxibに悪い接続があるかもしれません。

私はこのエラーを何度も経験しました。 TechZenの答えは絶対に正しいのですが、もう1つの一般的な原因は、あなたが既にペン先でFile's Ownerに接続している.h/.mでIBOutletプロパティの名前を変更である場合です。

あなたのペン先から:

  1. IBでオブジェクトを選択して、 'Connections Inspector'に行きます。
  2. [参照先]で、オブジェクトがまだ古いプロパティ名に接続されていないことを確認します。表示されている場合は、参照を削除するには小さい 'x'をクリックを再構築します。

    example 1

ストーリーボードを使用している場合のもう1つの一般的な原因は、UIButtonに複数の割り当てがあることです(解決策はnibの場合とほぼ同じです)。

  1. ストーリーボードを開いてUIButtonを右クリック
  2. このボタンには複数の割り当て/参照があることがわかります。小さい "x"が付いている "Main ..."グレーのウィンドウの1つを削除します。

    example 2

1480
nuttysimple

私はこのエラーを取り除くためにシミュレータ/ iPhoneからアプリを削除しなければなりませんでした。

110
Steve Rogers

テーブルにカスタムViewCellを実装しようとしたときにこのエラーが発生しました。 XIBのView Controllerを強調表示してCellViewの要素に接続すると、「このクラスはキーのキー値コーディングに準拠していません」というエラーが発生し、削除した後でエラーを取り除きました。

下の画像で接続を削除します。 Delete the connections in inspector when File Owner is highlighted

テーブルビューセルとの接続のみがあることを確認してください。テーブルビューのセルをクリックしてチェックするには、INSPECTORで接続を探します。

The connection should be in here when Table View Cell is highlighted

100
uplearnedu.com

時々これはあなたの "ターゲットから継承"と関係がありますその値を設定する必要があります。単一ターゲットアプリの場合は、[ターゲットから継承]を選択するだけです。複数のターゲットがある場合は、目的のターゲットを選択してください。

enter image description here

81
mrabins

IPhone専用アプリでユニバーサルなアプリではない場合は、次のフィールドが空であることを確認してください。

ターゲット>概要> iPhone/iPod導入情報>メインインターフェイス

そこでxibを指定するとクラッシュします。

64
erkanyildiz

このエラーは、すでに接続されているInterface Builderオブジェクトが、その所有者のソース(File's Owner)から削除/名前変更されていることを示しています。

修正する必要がある感嘆符が表示されている場合は、Interface BuilderのFiles's OwnerをControlキーを押しながらクリックします。

下の図では、 "aRemovedView"の右側に感嘆符が表示されています。これは、IBで既に接続されているときにIBOutletビューオブジェクトを削除したためです。

enter image description here

キャッチされていない例外 'NSUnknownKeyException'によるアプリケーションの終了、理由: '[setValue:forUndefinedKey:]:このクラスはキーのキー値コーディングに準拠していませんaRemovedView。

60
Tibidabo

私は同じ問題を抱えていました、そしてTechZenの答えは本当に素晴らしいかもしれませんが、私は私の状況に適用するのが難しいと感じました。

結局、ファイル所有者ではなくオブジェクトの下にリストされているコントローラ(以下の画像で強調表示)を使ってラベルをリンクすることで問題を解決しました。

お役に立てれば。

enter image description here

41
Eric Brotto

私の場合は、ストーリーボードのソースコードのエラーです。次の手順に従ってください。

  1. 最初にストーリーボードをソースコードとして開く
  2. <connections>を検索
  3. 不要な接続を削除する

例えば:

<connections>
    <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
    <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
    <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>

ご覧のとおり、これらはコード変数の名前とストーリーボードレイアウトのxmlタグの間の関係です。

36

enter image description hereenter image description here

私の修正はGerard Grundyのものと似ていました。 XIBを使用してカスタムUITableViewCellを作成する際に、カスタムクラス名をUITableViewCellではなくファイルの所有者に誤って適用していました。キャンバス上のUITableViewCellにクラスを適用し、それに私のIBOutletプロパティを接続することで問題は解決しました。

32
ashack
  1. あなたは一度だけIBOutletを指定する必要があります、あなたのivarのIBOutletラベルは不要です。
  2. あなたのUIViewControllerを使ってあなたのNIBをインスタンス化していますか?ある時点であなたは[SecondView initWithNibName:@"yourNibName" bundle:nil];を呼び出すべきです
30
kubi

これは私がデバイス(iPhone)でデバッグしているときにだけ起こっていました。 iOSシミュレータは問題なく動作していました。 Xcodeから "Product-> Clean"を実行することで問題は解決したようですが、私はその理由を知りません。

30
Maj

それはあなたがコントロールをドラッグしてアウトレットまたはアクションを作成し、それを削除するのを忘れたという事実から来ることができます。あなたがコードを削除したとしても、あるいは十分なcmd + Zを作ったとしても、あなたはあなたのストーリーボードの接続インスペクタに行き、あなたが作成したアクションやアウトレットがまだここにあるかどうかを見る必要があります。

23
Ilansky Naftali

私は http://www.idev101.com からキラに全く同じエラーメッセージと感謝(!!)を持っていました私は挑戦を解決することができました。私は彼女のサイトをグーグルしてこれらすべてのスレッドの上に積み重ねた後に初めて見つけました。私は今StackOverFlowに来る次のもののためにここに投稿していて、その人がグーグルを介してこのスレッドに来る可能性が高いので私がしたのと同じ挑戦をしています。

私はこれを間違って作ったことに気付きました。

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

これの代わりに:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

どこで

DeviceViewController

私のクラスの名前はまたとして知られていた

DeviceViewController.h 
DeviceViewController.m

あなたがする必要があります

"import DeviceViewController.h"

あなたのインプリメンテーション(.m File)の中であなたが呼び出したい場所。別のUIViewController.

私は私のような初心者のための明白なことを述べているだけならこれは質問に正確に関連していないので私は絶対に申し訳ありませんが投票を下すかもしれませんが私はまっすぐこれらのエラーメッセージの答えを探しています。もしこれを1人か2人にしておくといいですね:)

シモンズ:コードが他のUIViewControllerをロードするためにどのように続くかに興味がある人のために:

    [self presentViewController:deviceViewController animated:YES completion:nil];
22
Yannis

他の答えを見てみると、このエラーの原因となるものがたくさんあるようです。もう1つあります。

もし、あんたが

  • カスタムビューがある
  • @IBInspectableプロパティを追加しました
  • それから後でそれを削除しました

そうすると、次のようなエラーになるかもしれません。

[あなたのカスタムビュー]で(xxx)ユーザ定義の検査済みプロパティを設定できませんでした...:このクラスはキー[xxx]のキー値コーディングに準拠していません。

解決策は、古いプロパティを削除することです。

enter image description here

クラスの[ID]インスペクタを開き、[ユーザ定義の実行時属性]でプロパティ名を選択して、マイナスボタン( - )を押します。

20
Suragch

これは私のView Controllerがもともと.xibファイルを持っていたときに起こりますが、今はプログラムで作成されます。

このプロジェクトから.xibファイルを削除しましたが。ユーザーのiPhone/iPadには、このビューコントローラ用の.xibファイルが含まれている可能性があります。

.xibファイルを読み込もうとすると、通常このクラッシュが発生します。

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'

それをプログラムで作成するときの解決策はこれでしょう:

-(void)loadView {
    // Ensure that we don't load an .xib file for this viewcontroller
    self.view = [UIView new];
}
15
neoneye

Identity InspectorのView Controllerの「Module」プロパティは、予想したものとは異なる場合があります。また、新しいクラスがターゲットリストに追加されていることを確認してください。

12
ercu

2つのターゲットを持つプロジェクト(同じMainWindow XIBを使用)についても同様の問題がありました。このエラーを引き起こした根本的な問題は、UIViewControllerクラスが2番目のプロジェクトのリソースリストに含まれていなかったことです。すなわちインターフェースビルダーはMainWindow.xibでそれを指定することを私に許した、しかし実行時にシステムはクラスを見つけることができなかった。

すなわち問題のUIViewControllerクラスをcmdクリックし、それが 'Targets'タブに含まれていることを再確認します。

10
David Carney

これは、名前を変更または削除したコンポーネントをXibインターフェイスから参照する場合があります。参照は私にとってはうまくいきます。

8
MehrozKarim

私はちょうど私の複製したプロジェクトでこの問題を抱えていて、2箇所をチェックすることによって解決しました:

1-リストに.mファイルがあることを確認してください - >プロジェクト - ビルドフェーズ - コンパイルソース
2-その後、インターフェイスビルダーに移動し(おそらくこれはIBのみで発生するエラーです)、すべてのプロパティ、ラベル、画像などのリンクを解除します。私は属性を削除したことに気付きましたが、それはまだIBではリンクされていました。

それがある人のために働くことを願っています。

8
kubilay

これに加えて、私もこのエラーを受けていたので。これらすべての答えを見ていくことは、UIとストーリーボードのものを扱うことに当てはまるようです。私はオリジナルのポスターがUIで動いているように見えたことを知っていますが、このエラーの考えられる理由を探すとき、ほとんどすべての質問がこの質問につながります。私の解決策を追加してください。

私はSwift 2でWebサービスのコーディングに取り組んでいました。必要なプロキシオブジェクトとスタブをすべて構築しました。返されたXMLをループ処理しながら、私は自分のオブジェクトを動的にインスタンス化しました。これらはすべてNSObjectから取得され、それらにsetValue:forKeyを使用しています。 setValue:forKeyがプロパティを設定しようとするたびに、このエラーが発生しました。

私が扱っているそれぞれの型(例えばBool?CShort?String?)とそれぞれのXMLノードについてswitch文を持っていて、それを調べてオブジェクト上の型が何であるかを調べ、それからその型に値を変換して設定setValue:forKeyと一緒に。

結局、私はこれらすべてのsetValue:forKey行をコメントアウトし始め、私のdefault switchステートメントのケースがString?に対してうまくいったことを知りました。

setValue:forKeyString?のようなObjective-Cの型に直接マッピングされているのでなければ、/ ** /はにオプションのSwift型をNSNumber?と一緒に使用することはできません。直接マッピングされているので、すべてのCShort?型をNSNumber?に変更しました。私の場合のBool?では、Boolを使用してfalseに初期化するだけで問題ありませんでした。他の人はその贅沢を持っていないかもしれません。

とにかく、これが同じような問題を抱えてこの質問に向きを変え続け、「私はUIで何もしていない!」と言っている他の誰かに役立つことを願っています。

それでは最後にもう一度言いますが、Key-Valueコーディングはオプションでは機能しません。以下で私はどこかで見つけることになりました、しかし、私がこれをどこに見つけたか覚えていないならば、私がこれをどこに見つけたか忘れてしまいました。

KVCはCocoa/Objective-Cであり、Objective-CはOptional Intを見ることができないため、Optional IntプロパティにKVCを使用することはできません。これはObjective-Cにブリッジされていません。 Objective-CはObjective-Cにブリッジされている型のみを見ることができます。

nSObjectから派生したクラス型

@objcで公開されているクラス型

橋渡しされる素早い構造

8
AtheistP3ace

このエラーは他のものです!

これは私がそれを修正した方法です。私はxcodeバージョン6.1.1とSwiftを使っています。私のアプリが次の画面にジャンプするためにセグエを実行しようとするたびに私はこのエラーを得ました。ここで私がしたこと.

  1. ボタンが正しいアクションに接続されていることを確認しました(これは問題ではありませんでしたが、確認するのに適しています)。
  2. 誤って作成した可能性のある追加のアクションやアウトレットがボタンにないことを確認してください。 (これは問題ではありませんでしたが、それでも確認するのに適しています)
  3. ログをチェックして、NEXT SCREENのすべてのボタンに正しい動作があることを確認します。セグエがある場合は、それらに一意の識別子があることを確認します。 (これが問題でした)
    • いずれかのセグエに固有のIDがありませんでした
    • ボタンの1つには、アクションと私が誤って作成した2つのアウトレットがありました。
    • 追加のアウトレットを削除し、次の画面へのセグエが固有のIDを持っていることを確認してください。

乾杯、

7
Ronaldoh1

「このクラスはキーのキー値コーディングに準拠していません」少し遅れたことはわかっていますが、答えが違うので投稿する必要があると思います

コントローラをプッシュする間違った方法

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

正しい方法

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

上記のような答えが見つからなかったので、同じ問題を抱えている人に役立つかもしれません

7
Emy Stats

私が見つけたもう一つの "準拠していない"問題は、私がなんらかの理由で2つのクラスのコピーを持つことができたときでした。

間違ったコピーにキーを追加していました。 Interface Builderはまだキーを見てそれらに接続させていますが、実行時には新しいキーを持たないクラスの他のコピーを使用していました。

どれが「正しい」コピーであるかを見つけるために、XCodeの他の場所でクラス名をクリックして正しいコピーにジャンプし、次に(未使用のコピーから編集を引き継いでから)悪い未使用のコピーを削除しました。

物語の教訓:重複したクラスファイルは悪いです。

7
Jason

問題を引き起こしているIBOutletsを含むカスタムUIViewControllerサブクラスがある場合、実際にエラーを取り除くために私が見つけた唯一のステップのセットは、

.1クラスをUIViewControllerに変更

.2すべてのコンセントを取り外します(すべてのコンセントが黄色の警告三角形になります)。問題のあるコンセントを取り外すだけで十分な場合があります。

.3すべての標準的な手順を実行します - ↑⌘K、派生データを削除します(、祈りのマット、心配の玉)

.4アプリを起動します - 問題のあるシーンに行きます。

.5アプリを終了し、Interface Builderに戻ってクラスをカスタムクラス名に戻します。

.6コンセントを接続し直します。

アプリを起動すると、これで通常はキーバリューコンプライアンスの問題が解決されます。

6
Damo

同じ症状がありました。根本的な原因は、私のソースファイルの "Target Membership"が正しいターゲットに設定されていなかったことです。それは私のクラスがビルドされて私のアプリに含まれないことを意味します。

修正するには:

  1. あなたの.mファイルをハイライトします。
  2. 右側のペインで、ファイルインスペクタを選択します。
  3. [Target Membership]セクションで、適切なビルドターゲットがチェックされていることを確認します。

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

6
Mike M. Lin

私の場合。マージ後にxibファイルにアウトレットがなくなっていませんでした。

Shift + Command + K

私の問題を解決しました。私は自分のプロジェクトをきれいにして再構築しました。

5
Malder

私の場合、これは間違ったNibを参照したことが原因です。

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];
4
wspruijt

私は同じ種類の問題を抱えていました。 XIBファイルでtableviewCellを作成したところ、そのようなエラーが発生していました。私の問題は、 "File's Owner"クラスを自分のセルビューコントローラに定義したことです。それを取り出してセルのクラスを設定しました(xibファイルでセルの境界線をクリックし、右パネルの3番目のタブに移動して、クラスがあなたのView Controllerを選択したと言う)。

コードをきれいにしてみてください。

3
pedrotorres

私は同じ問題を抱えています。シミュレータをリセットしました。ボタンコントロールの削除と追加そしてついにきれいになりました。 :)スタックオーバーフローのおかげで。私のコードがどうやってうまく動き始めたのか。

3
priya

.hファイルにはUI要素へのアウトレットがありますが、IBOutletプロパティがない可能性があります

接続属性のすべてのUI要素について、アウトレットとそれに対応する.hヘッダーファイルのプロパティを確認します。

.hファイルに1つ以上のプロパティエントリがありません。

3
Avinash Jadhav

ストーリーボードでこのエラーが出ました。上記の解決法は問題には思えないので、ビューコントローラを削除して再度追加し(そしてもちろんセグエを再接続してクラスを再割り当てし)、修正しました。それが実際には何なのかわかりませんが、これが開始される直前に関連するView Controllerクラスの名前を変更していました。

3
Symmetric

Storyboard/xibインターフェイスで問題のあるオブジェクトを選択し、[接続]インスペクタを表示して([表示] - > [ユーティリティ] - > [接続インスペクタを表示])、参照元のアウトレットがないことを確認します。あなたが不要な接続を削除し、あなたが行ってもいいはずです。

私は同じ問題を抱えていました。私のプロジェクトでは製品名を変更したためにこの問題が発生しましたが、インターフェースビルダーでは古い名前をModuleとしました。

2
Jyotsna

ヘッダファイルからプロパティを削除しました。私はそれへの参照を見つけることができませんでしたが、デバッグエラーはまだそれを参照していました。私は、nibファイルがまだそれを参照していることを知りました。私はそれを参照していたブロックを削除し、すべてが修正されました。

Project Navigatorで、

Nib(xib)ファイルを見つけます。右クリックして[ソースの表示]をクリックします。次の全文を削除しました

<object class="IBConnectionRecord">
    <object class="IBCocoaTouchOutletConnection" key="connection">
        <string key="label">DeleteLabel</string>
        <reference key="source" ref="372490531"/>
        <reference key="destination" ref="774585933"/>
    </object>
    <int key="connectionID">20</int>
</object>
2
Apple Pirate

アウトレットを削除し、フォームIBを.Hファイルに描画することによって再作成する必要があります。

2
IsPha

UIラベルまたは他のUI要素がView Controllerクラス内の2つの変数によって参照されていて、そのうちの1つを削除した場合も同様です。

2
sysuser

UIViewをストーリーボードにリンクし、IBOutletを次のように接続したときに、これが発生しました。

@property (strong, nonatomic) IBOutlet UIView *someView

しかし後で、UIViewをカスタムクラスにしましたが、上で定義したこのIBOutletのクラス名を変更するのを忘れていました。カスタムビューにサブビューがない場合は文句を言わないが、サブビューがあるとすぐに問題に記載されているエラーがサブビューの1つに表示され、問題が実際に存在する外側のUIViewには表示されないため。実際にはサブビューとは何の関係もないのに、問題を見つけようとしているすべてのサブビューを削除して読んでもらった

1
Fonix

私の場合、

[[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]

それが理由でした。

これをinitWithNibNameに置き換えて解決しました。

1
Deve Tester

メインストーリーボードを起動画面ファイルとして使用していたときにも同じ問題がありました。ストーリーボードを起動画面ファイルとして使用している場合は、まだロードされていないため、View Controllerに接続しないでください。

1
IanS

私はこの問題を2つのことで解決しました。

  1. ビューの固定クラス参照:

  1. すべてのアウトレットを再インポートしました。

1

この状況のもう1つの原因は、このプロパティが@dynamicとして実装されていると宣言したのに、クラスが親クラスで見つけられないことです。

1
zakhej

先頭にatsignを付けずにソート記述子を使おうとしているのかもしれません。のように:

[array valueForKeyPath:@"distinctUnionOfObjects.self"]

これは実際には次のとおりです。

[array valueForKeyPath:@"@distinctUnionOfObjects.self"]

1
CommaToast

これはすでに私に二度起こった。

私がそれを他のものからコピーしたので、解決策はストーリーボード全体を作り直すことでした(それはほとんど同じだったので)

1

私は同じ問題を抱えていました、そして、原因はInterface Builderでモジュールを指定することに起因していました(それを空白のままにするのではなく)。だから、私が設定したものとは異なるモジュールを使っていると、アプリはクラッシュするでしょう。

1
Chris Allinson

あなたが他の答えで見ることができる他の問題と一緒に。自分でこのエラーを作成したのは、最初からプロジェクトを開始し、ストーリーボードの最初のシーンを削除してから、別のプロジェクトのシーンをストーリーボードに貼り付けることでした。

それをしても問題ありません。ストーリーボードのエントリポイントを追加するだけです。つまり、is initial View Controllerを確認してください。そうでなければ、それは灰色のシーンになり、あなたにエラーを投げるでしょう。

enter image description here

1
Honey

同じ問題が提示されました。私の解決策はMain Storyboardドロップダウンに正しいストーリーボードの値を入れることでした。 mainstoryboard.storyboardという名前に変更しましたが、デプロイメント情報はリセットしませんでした。

1

私は別の理由で同じ問題に遭遇しました。私はメインストーリーボードを起動画面ファイルとして使用していました。ストーリーボードを起動画面ファイルとして使用している場合は、まだロードされていないため、View Controllerに接続しないでください。

1
IanS

私はxcode7にアップグレードした後にSwiftクラスでこの問題を抱えていました。 @objcディレクティブを使用して解決しました:

@objc(XXXViewController)クラスXXXViewController

1
user1760527

私の場合は、ViewController.mのIBOutletのプロパティ名が変更されましたが、Storyboardのプロパティ名は変更されませんでした。 Ctrlキーを押しながらドラッグでViewController.mにIBOutletを再導入すると、問題が解決しました。私はXCodeでそのような「孤児」のIBOutletを見つける方法にも気づきました:(画像を見て)「孤児になっていない」ものは行番号の代わりに同心円を持っています。

"Orphaned" IBOutlets don't have concentric circles in the line number column.

1
Roman Reimche

私はUIビューコントローラのストーリーボードとSwiftクラスでこの問題を抱えていました。 @objcディレクティブを使用して解決しました:

@objc(MyViewController) class MyViewController
1
user1760527

私のテーブルビューセルを扱うとき、私は同じエラーログに遭遇します。私のUILabelが参照のアウトレット(参照インスペクタでチェックアウトできる)をファイルの所有者と私のセルのクラスの両方に複製していることがわかりました。ファイルの所有者への参照を削除するとうまくいきます。

0
JackieLam

ピッカーオブジェクトを未接続のままにしましたか?

笑54回答があり、それらのうちの一つは私の解決策ではありません。一般的なエラーについて話します。

私の場合は、VCにピッカーオブジェクトがあり、アウトレットとアクションを設定していなかったためです。

レイアウトがどのように見えるかを見たいだけなときは、ボタンなどを未接続のままにしておくことがよくあります。しかし、ピッカーのためにこれを行うことはできないようです。

0
tem

ペン先から手動でビューを読み込んだときに同じエラーが発生しました。ビューの所有者を設定するのを忘れていたことがわかりました。

たとえば次の方法でビューをロードすると、

 let view = Bundle.main.loadNibNamed("MyNibFileName",
                                 owner: nil,
                                 options: nil)?.first as! UIView

iBOutletを追加すると、IBOutletを参照できず、アプリケーションは上記のエラーでクラッシュします。

修正:ビューの所有者を割り当てます。

 let view = Bundle.main.loadNibNamed("MyNibFileName",
                                 owner: self,
                                 options: nil)?.first as! UIView
0
Abhi

存在しない値を観察しようとしているのであれば、注意してください。

私が代わりに "text"プロパティを観察することになっていたとき、私はテキストフィールドの "Text"プロパティを観察していたように単に私に起こりました。

0
Ahmed Elashker

私はさらに別のわずかに異なる形式で同じエラーがありました:

インターフェースビルダーでは、カスタムサブコントローラーを持つナビゲーションコントローラーがあります。これのクラス名は正しく設定されていましたが、NIB名(サブコントローラの選択、Attributes Inspectorへ移動)が間違ったファイルに設定されていました(基本的には異なるターゲットの1つに設定されています)。これを正しいファイル名にリセットすると問題は解決しました。

0
sgvd

問題の原因は、ストーリーボードファイルを(私が正しく思い出した場合はXcodeの外部で)複製し、その複製ファイル内のすべてのView Controllerが元のファイルと同じオブジェクトIDを持っていたことです。解決策は、View Controllerをコピーアンドペーストすることです。そうすれば、それらは新しいobject-IDを取得します。 Identity InspectorでオブジェクトIDを確認できます。

0
Olle Raab

私の場合は、ストーリーボードにViewControllerを追加しましたが、デザイナーでストーリーボードIDを割り当てませんでした。私はそれにIDを与えたら、それはうまくいった。

xamarin/Visual Studio 2015を使用しています。

0
Wes

次のように.mファイルにカスタムクラスの(空の場合でも)実装を追加してください。

@implementation MySubclass
@end
0
Iulian Onofrei

私は問題を引き起こすかもしれない別の可能性を見つけました。

間違ったxib名で "initWithNibName"メソッドを使用すると、この種のクラッシュも発生します。

あなたがxibファイルの名前を変更することを選択し、そして "initWithNibName"メソッドで使用される名前を同じ名前に変更することを忘れた場合など。

0
Li Fumin

Swiftファイルがターゲットに追加または削除されない場合があります。ターゲット - >ビルド設定 - >ソースのコンパイル - >必要なSwiftクラスファイルが見つからないかどうかを確認してください。私の場合、Swiftのソースファイルがコンパイルに含まれていないためにアプリケーションがクラッシュしていました。

0
jatin

私もこの問題を抱えていました。あるxibファイルから別のxibファイルにIBOutletを含むビューをコピーしました。また、古い参照を削除して新しい参照を作成したにもかかわらず、このエラーが発生していました。

この問題を解決するためにxcodeを再起動しました。

0
Rickster

ターゲット名を変更した後、私の問題が始まりました。

私自身のカスタムUIクラスは、モジュール名を古いターゲット名に設定していました。

ターゲット名を新しい名前に変更しましたが、現在は正常に機能しています。

0
MBH

通常これが私に起こるとき、@ TechZenの答えはトリックをします。しかし昨日、私は問題が私のコードにあることを発見するためだけにストーリーボードの接続で恥ずかしいほど長い時間浪費していました。

ストーリーボードにはさまざまなレイアウトを処理するカスタムView Controllerがありますが、レイアウトの1つに、他のレイアウトで使用されていない特別なラベルが必要でした。だから私はそのようなサブクラスを作成しました:

@interface MyViewControllerSubclass : MyViewController

それから、MyViewControllerSubclass.mにプライベートプロパティを追加しました。

@interface MyViewController ()
@property (weak, nonatomic) IBOutlet UILabel *crashesApp;
@end

Xcodeを使ってこのIBOutletに接続することができましたが、ビューがロードされるたびに、アプリが古い「キー 'chrashesApp'に準拠していない」というエラーでクラッシュしました。

振り返ってみると、その解決策は半自明ですが、プライベートカテゴリを変更して正しい名前、つまりサブクラスの名前を使用することでした。

@interface MyViewControllerSubclass ()
@property (weak, nonatomic) IBOutlet UILabel *noMoreCrashing;
@end
0
clozach

私は過去に同様の問題を抱えていたことを覚えています、私は行を変更することによってそれを解決しました:

_vicMain = [[UIViewController alloc] initWithNibName:@"vicMainScreen" bundle:nil];

に:

#include "vicLogin_iPad.h"       // This is the H file of the class holding the code for
                                 // processing all the IBOUtlets for the Login screen
.
.
.

_vicMain = [[vicLogin_iPad alloc] initWithNibName:@"vicMainScreen" bundle:nil];

最初にUIViewControllerが_vicMainを初期化するように宣言していたことに注意してください。上部のポップアップウィンドウを使用した後、両方とも同じUIViewControllerを使用していることに気付きました。

によって:

1)上記の_vicMain(ビューコントローラオブジェクト/変数)を実行しているのと同じモジュールと共に(サブビューの)クラスを含めます。つまり、私の場合は "vicLogin_iPad.h"です。

2)カスタムコンストラクタを使用してオブジェクトを宣言します(つまり、 "xxx = [UIViewController alloc] ..."の代わりに、 "xxx = [vicLogin_iPad alloc] ..."を使用します。

問題は解決しました。

エラーメッセージの詳細が欠けていることを特定するのは面倒なので、これが役立つことを願っています...

よろしくハイダーサティ

0
Heider Sati

この問題は、Interface Builderの別のXIBファイルで小さなサブビューを設計し、IBでそれを親ビューと同じクラスに設定する場合にも発生します。

あなたがそれからこのようにそれを示すならば:

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"NameOfTheSubviewNibFile" bundle:nil];
[self.view addSubview:vc.view];

ビューは表示されますが、ファイル所有者にIBOutletsが接続されている場合は、エラーメッセージが表示されます。だから、これは代わりに動作するはずです:

  1. 親ビューのコードで、サブビューのnibファイル内のビューを参照するためにIBOutlet UIView *mySubviewを宣言します。
  2. サブビューのnibファイルで、File Ownerをビューに接続し、それをmySubviewに設定します。
  3. することでそれを示す:
[[NSBundle mainBundle] loadNibNamed:@ "NameOfTheSubviewNibFile"所有者:自己オプション:nil] 
 [self.view addSubview:mySubview]; 

そしてあなたは元気になります!

0
Eric

もう1つのトリッキーなケース:

IBでは、ViewControllerをストーリーボードに追加し、そのビューを削除し、カスタムクラスを "MyViewController"に設定してビューをMyViewController.xibからインスタンス化しました。

ストーリーボードIDを同じ "MyViewController"に指定すると、例外が発生します。

ストーリーボードIDを別の名前に変更すると問題が解決します。

0