私は私のクラスで作成されたUILabel
とIBOutlet
をリンクしようとしています。
私のアプリケーションは次のエラーでクラッシュしています。これは何を意味するのでしょうか?どうすれば修正できますか?
***キャッチされていない例外 'NSUnknownKeyException'のためにアプリケーションを終了しています、理由: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:このクラスはキーXXXのキー値コーディングに準拠していません。
あなたのプロジェクトをダウンロードしました。
あなたが得ているエラーは
'NSUnknownKeyException'、理由: '[<UIViewController 0x3927310> setValue:forUndefinedKey:]:このクラスはキー文字列のキー値コーディングに準拠していません。
これは、MainWindow.xib
のSecond
ビューコントローラのクラスが UIViewController
ではなくSecondView
であることが原因です。正しいクラスに変更すると問題が解決します。
ちなみに、Objective-Cでは "string"のような名前を付けるのは悪い習慣です。それは実行時の命名の衝突を招きます。練習アプリから一度でもそれらを避けてください。命名の衝突は突き止めるのが非常に難しいことがありえます、そしてあなたは時間を無駄にしたくありません。
このエラーのもう一つの考えられる理由:あるコントローラから別のコントローラに要素をコピー&ペーストするとき、この要素を編集して新しいコントローラに再リンクした後でも、Xcodeはどうにかそのリンクを元のコントローラに保ちます。
このエラーのもう一つの考えられる理由:
悪いアウトレット.
.h
ファイル内のアウトレット名を削除するかリネームしてください。
.xib
または.storyboard
ファイルのConnection Inspectorで削除してください。
私はこのエラーを何度も経験しました。 TechZenの答えは絶対に正しいのですが、もう1つの一般的な原因は、あなたが既にペン先でFile's Ownerに接続している.h/.mでIBOutletプロパティの名前を変更である場合です。
あなたのペン先から:
[参照先]で、オブジェクトがまだ古いプロパティ名に接続されていないことを確認します。表示されている場合は、参照を削除するには小さい 'x'をクリックを再構築します。
ストーリーボードを使用している場合のもう1つの一般的な原因は、UIButtonに複数の割り当てがあることです(解決策はnibの場合とほぼ同じです)。
私はこのエラーを取り除くためにシミュレータ/ iPhoneからアプリを削除しなければなりませんでした。
テーブルにカスタムViewCellを実装しようとしたときにこのエラーが発生しました。 XIBのView Controllerを強調表示してCellViewの要素に接続すると、「このクラスはキーのキー値コーディングに準拠していません」というエラーが発生し、削除した後でエラーを取り除きました。
下の画像で接続を削除します。
テーブルビューセルとの接続のみがあることを確認してください。テーブルビューのセルをクリックしてチェックするには、INSPECTORで接続を探します。
IPhone専用アプリでユニバーサルなアプリではない場合は、次のフィールドが空であることを確認してください。
ターゲット>概要> iPhone/iPod導入情報>メインインターフェイス
そこでxibを指定するとクラッシュします。
このエラーは、すでに接続されているInterface Builderオブジェクトが、その所有者のソース(File's Owner)から削除/名前変更されていることを示しています。
修正する必要がある感嘆符が表示されている場合は、Interface BuilderのFiles's OwnerをControlキーを押しながらクリックします。
下の図では、 "aRemovedView"の右側に感嘆符が表示されています。これは、IBで既に接続されているときにIBOutletビューオブジェクトを削除したためです。
キャッチされていない例外 'NSUnknownKeyException'によるアプリケーションの終了、理由: '[setValue:forUndefinedKey:]:このクラスはキーのキー値コーディングに準拠していませんaRemovedView。
私は同じ問題を抱えていました、そしてTechZenの答えは本当に素晴らしいかもしれませんが、私は私の状況に適用するのが難しいと感じました。
結局、ファイル所有者ではなくオブジェクトの下にリストされているコントローラ(以下の画像で強調表示)を使ってラベルをリンクすることで問題を解決しました。
お役に立てれば。
私の場合は、ストーリーボードのソースコードのエラーです。次の手順に従ってください。
<connections>
を検索例えば:
<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タグの間の関係です。
私の修正はGerard Grundyのものと似ていました。 XIBを使用してカスタムUITableViewCellを作成する際に、カスタムクラス名をUITableViewCellではなくファイルの所有者に誤って適用していました。キャンバス上のUITableViewCellにクラスを適用し、それに私のIBOutletプロパティを接続することで問題は解決しました。
IBOutlet
を指定する必要があります、あなたのivarのIBOutlet
ラベルは不要です。UIViewController
を使ってあなたのNIBをインスタンス化していますか?ある時点であなたは[SecondView initWithNibName:@"yourNibName" bundle:nil];
を呼び出すべきですこれは私がデバイス(iPhone)でデバッグしているときにだけ起こっていました。 iOSシミュレータは問題なく動作していました。 Xcodeから "Product-> Clean"を実行することで問題は解決したようですが、私はその理由を知りません。
それはあなたがコントロールをドラッグしてアウトレットまたはアクションを作成し、それを削除するのを忘れたという事実から来ることができます。あなたがコードを削除したとしても、あるいは十分なcmd + Zを作ったとしても、あなたはあなたのストーリーボードの接続インスペクタに行き、あなたが作成したアクションやアウトレットがまだここにあるかどうかを見る必要があります。
私は 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];
これは私の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];
}
Identity InspectorのView Controllerの「Module」プロパティは、予想したものとは異なる場合があります。また、新しいクラスがターゲットリストに追加されていることを確認してください。
2つのターゲットを持つプロジェクト(同じMainWindow XIBを使用)についても同様の問題がありました。このエラーを引き起こした根本的な問題は、UIViewControllerクラスが2番目のプロジェクトのリソースリストに含まれていなかったことです。すなわちインターフェースビルダーはMainWindow.xibでそれを指定することを私に許した、しかし実行時にシステムはクラスを見つけることができなかった。
すなわち問題のUIViewControllerクラスをcmdクリックし、それが 'Targets'タブに含まれていることを再確認します。
これは、名前を変更または削除したコンポーネントをXibインターフェイスから参照する場合があります。参照は私にとってはうまくいきます。
私はちょうど私の複製したプロジェクトでこの問題を抱えていて、2箇所をチェックすることによって解決しました:
1-リストに.mファイルがあることを確認してください - >プロジェクト - ビルドフェーズ - コンパイルソース
2-その後、インターフェイスビルダーに移動し(おそらくこれはIBのみで発生するエラーです)、すべてのプロパティ、ラベル、画像などのリンクを解除します。私は属性を削除したことに気付きましたが、それはまだIBではリンクされていました。
それがある人のために働くことを願っています。
これに加えて、私もこのエラーを受けていたので。これらすべての答えを見ていくことは、UIとストーリーボードのものを扱うことに当てはまるようです。私はオリジナルのポスターがUIで動いているように見えたことを知っていますが、このエラーの考えられる理由を探すとき、ほとんどすべての質問がこの質問につながります。私の解決策を追加してください。
私はSwift 2でWebサービスのコーディングに取り組んでいました。必要なプロキシオブジェクトとスタブをすべて構築しました。返されたXMLをループ処理しながら、私は自分のオブジェクトを動的にインスタンス化しました。これらはすべてNSObject
から取得され、それらにsetValue:forKey
を使用しています。 setValue:forKey
がプロパティを設定しようとするたびに、このエラーが発生しました。
私が扱っているそれぞれの型(例えばBool?
、CShort?
、String?
)とそれぞれのXMLノードについてswitch文を持っていて、それを調べてオブジェクト上の型が何であるかを調べ、それからその型に値を変換して設定setValue:forKey
と一緒に。
結局、私はこれらすべてのsetValue:forKey
行をコメントアウトし始め、私のdefault
switchステートメントのケースがString?
に対してうまくいったことを知りました。
setValue:forKey
やString?
のような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で公開されているクラス型
橋渡しされる素早い構造
このエラーは他のものです!
これは私がそれを修正した方法です。私はxcodeバージョン6.1.1とSwiftを使っています。私のアプリが次の画面にジャンプするためにセグエを実行しようとするたびに私はこのエラーを得ました。ここで私がしたこと.
乾杯、
「このクラスはキーのキー値コーディングに準拠していません」少し遅れたことはわかっていますが、答えが違うので投稿する必要があると思います
コントローラをプッシュする間違った方法
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];
上記のような答えが見つからなかったので、同じ問題を抱えている人に役立つかもしれません
私が見つけたもう一つの "準拠していない"問題は、私がなんらかの理由で2つのクラスのコピーを持つことができたときでした。
間違ったコピーにキーを追加していました。 Interface Builderはまだキーを見てそれらに接続させていますが、実行時には新しいキーを持たないクラスの他のコピーを使用していました。
どれが「正しい」コピーであるかを見つけるために、XCodeの他の場所でクラス名をクリックして正しいコピーにジャンプし、次に(未使用のコピーから編集を引き継いでから)悪い未使用のコピーを削除しました。
物語の教訓:重複したクラスファイルは悪いです。
問題を引き起こしているIBOutletsを含むカスタムUIViewControllerサブクラスがある場合、実際にエラーを取り除くために私が見つけた唯一のステップのセットは、
.1クラスをUIViewControllerに変更
.2すべてのコンセントを取り外します(すべてのコンセントが黄色の警告三角形になります)。問題のあるコンセントを取り外すだけで十分な場合があります。
.3すべての標準的な手順を実行します - ↑⌘K、派生データを削除します(、祈りのマット、心配の玉)
.4アプリを起動します - 問題のあるシーンに行きます。
.5アプリを終了し、Interface Builderに戻ってクラスをカスタムクラス名に戻します。
.6コンセントを接続し直します。
アプリを起動すると、これで通常はキーバリューコンプライアンスの問題が解決されます。
同じ症状がありました。根本的な原因は、私のソースファイルの "Target Membership"が正しいターゲットに設定されていなかったことです。それは私のクラスがビルドされて私のアプリに含まれないことを意味します。
修正するには:
これが誰かに役立つことを願っています。
私の場合。マージ後にxibファイルにアウトレットがなくなっていませんでした。
Shift + Command + K
私の問題を解決しました。私は自分のプロジェクトをきれいにして再構築しました。
私の場合、これは間違ったNibを参照したことが原因です。
BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];
私は同じ種類の問題を抱えていました。 XIBファイルでtableviewCellを作成したところ、そのようなエラーが発生していました。私の問題は、 "File's Owner"クラスを自分のセルビューコントローラに定義したことです。それを取り出してセルのクラスを設定しました(xibファイルでセルの境界線をクリックし、右パネルの3番目のタブに移動して、クラスがあなたのView Controllerを選択したと言う)。
コードをきれいにしてみてください。
私は同じ問題を抱えています。シミュレータをリセットしました。ボタンコントロールの削除と追加そしてついにきれいになりました。 :)スタックオーバーフローのおかげで。私のコードがどうやってうまく動き始めたのか。
.hファイルにはUI要素へのアウトレットがありますが、IBOutletプロパティがない可能性があります
接続属性のすべてのUI要素について、アウトレットとそれに対応する.hヘッダーファイルのプロパティを確認します。
.hファイルに1つ以上のプロパティエントリがありません。
ストーリーボードでこのエラーが出ました。上記の解決法は問題には思えないので、ビューコントローラを削除して再度追加し(そしてもちろんセグエを再接続してクラスを再割り当てし)、修正しました。それが実際には何なのかわかりませんが、これが開始される直前に関連するView Controllerクラスの名前を変更していました。
Storyboard/xibインターフェイスで問題のあるオブジェクトを選択し、[接続]インスペクタを表示して([表示] - > [ユーティリティ] - > [接続インスペクタを表示])、参照元のアウトレットがないことを確認します。あなたが不要な接続を削除し、あなたが行ってもいいはずです。
私は同じ問題を抱えていました。私のプロジェクトでは製品名を変更したためにこの問題が発生しましたが、インターフェースビルダーでは古い名前をModuleとしました。
ヘッダファイルからプロパティを削除しました。私はそれへの参照を見つけることができませんでしたが、デバッグエラーはまだそれを参照していました。私は、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>
アウトレットを削除し、フォームIBを.Hファイルに描画することによって再作成する必要があります。
UIラベルまたは他のUI要素がView Controllerクラス内の2つの変数によって参照されていて、そのうちの1つを削除した場合も同様です。
UIViewをストーリーボードにリンクし、IBOutletを次のように接続したときに、これが発生しました。
@property (strong, nonatomic) IBOutlet UIView *someView
しかし後で、UIViewをカスタムクラスにしましたが、上で定義したこのIBOutletのクラス名を変更するのを忘れていました。カスタムビューにサブビューがない場合は文句を言わないが、サブビューがあるとすぐに問題に記載されているエラーがサブビューの1つに表示され、問題が実際に存在する外側のUIViewには表示されないため。実際にはサブビューとは何の関係もないのに、問題を見つけようとしているすべてのサブビューを削除して読んでもらった
私の場合、
[[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]
それが理由でした。
これをinitWithNibNameに置き換えて解決しました。
メインストーリーボードを起動画面ファイルとして使用していたときにも同じ問題がありました。ストーリーボードを起動画面ファイルとして使用している場合は、まだロードされていないため、View Controllerに接続しないでください。
私はこの問題を2つのことで解決しました。
この状況のもう1つの原因は、このプロパティが@dynamicとして実装されていると宣言したのに、クラスが親クラスで見つけられないことです。
先頭にatsignを付けずにソート記述子を使おうとしているのかもしれません。のように:
[array valueForKeyPath:@"distinctUnionOfObjects.self"]
これは実際には次のとおりです。
[array valueForKeyPath:@"@distinctUnionOfObjects.self"]
これはすでに私に二度起こった。
私がそれを他のものからコピーしたので、解決策はストーリーボード全体を作り直すことでした(それはほとんど同じだったので)
私は同じ問題を抱えていました、そして、原因はInterface Builderでモジュールを指定することに起因していました(それを空白のままにするのではなく)。だから、私が設定したものとは異なるモジュールを使っていると、アプリはクラッシュするでしょう。
同じ問題が提示されました。私の解決策はMain Storyboardドロップダウンに正しいストーリーボードの値を入れることでした。 mainstoryboard.storyboardという名前に変更しましたが、デプロイメント情報はリセットしませんでした。
私は別の理由で同じ問題に遭遇しました。私はメインストーリーボードを起動画面ファイルとして使用していました。ストーリーボードを起動画面ファイルとして使用している場合は、まだロードされていないため、View Controllerに接続しないでください。
私はxcode7にアップグレードした後にSwiftクラスでこの問題を抱えていました。 @objcディレクティブを使用して解決しました:
@objc(XXXViewController)クラスXXXViewController
私はUIビューコントローラのストーリーボードとSwiftクラスでこの問題を抱えていました。 @objcディレクティブを使用して解決しました:
@objc(MyViewController) class MyViewController
私のテーブルビューセルを扱うとき、私は同じエラーログに遭遇します。私のUILabelが参照のアウトレット(参照インスペクタでチェックアウトできる)をファイルの所有者と私のセルのクラスの両方に複製していることがわかりました。ファイルの所有者への参照を削除するとうまくいきます。
笑54回答があり、それらのうちの一つは私の解決策ではありません。一般的なエラーについて話します。
私の場合は、VCにピッカーオブジェクトがあり、アウトレットとアクションを設定していなかったためです。
レイアウトがどのように見えるかを見たいだけなときは、ボタンなどを未接続のままにしておくことがよくあります。しかし、ピッカーのためにこれを行うことはできないようです。
ペン先から手動でビューを読み込んだときに同じエラーが発生しました。ビューの所有者を設定するのを忘れていたことがわかりました。
たとえば次の方法でビューをロードすると、
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
存在しない値を観察しようとしているのであれば、注意してください。
私が代わりに "text"プロパティを観察することになっていたとき、私はテキストフィールドの "Text"プロパティを観察していたように単に私に起こりました。
私はさらに別のわずかに異なる形式で同じエラーがありました:
インターフェースビルダーでは、カスタムサブコントローラーを持つナビゲーションコントローラーがあります。これのクラス名は正しく設定されていましたが、NIB名(サブコントローラの選択、Attributes Inspectorへ移動)が間違ったファイルに設定されていました(基本的には異なるターゲットの1つに設定されています)。これを正しいファイル名にリセットすると問題は解決しました。
問題の原因は、ストーリーボードファイルを(私が正しく思い出した場合はXcodeの外部で)複製し、その複製ファイル内のすべてのView Controllerが元のファイルと同じオブジェクトIDを持っていたことです。解決策は、View Controllerをコピーアンドペーストすることです。そうすれば、それらは新しいobject-IDを取得します。 Identity InspectorでオブジェクトIDを確認できます。
私の場合は、ストーリーボードにViewControllerを追加しましたが、デザイナーでストーリーボードIDを割り当てませんでした。私はそれにIDを与えたら、それはうまくいった。
xamarin/Visual Studio 2015を使用しています。
次のように.m
ファイルにカスタムクラスの(空の場合でも)実装を追加してください。
@implementation MySubclass
@end
私は問題を引き起こすかもしれない別の可能性を見つけました。
間違ったxib名で "initWithNibName"メソッドを使用すると、この種のクラッシュも発生します。
あなたがxibファイルの名前を変更することを選択し、そして "initWithNibName"メソッドで使用される名前を同じ名前に変更することを忘れた場合など。
Swiftファイルがターゲットに追加または削除されない場合があります。ターゲット - >ビルド設定 - >ソースのコンパイル - >必要なSwiftクラスファイルが見つからないかどうかを確認してください。私の場合、Swiftのソースファイルがコンパイルに含まれていないためにアプリケーションがクラッシュしていました。
私もこの問題を抱えていました。あるxibファイルから別のxibファイルにIBOutletを含むビューをコピーしました。また、古い参照を削除して新しい参照を作成したにもかかわらず、このエラーが発生していました。
この問題を解決するためにxcodeを再起動しました。
ターゲット名を変更した後、私の問題が始まりました。
私自身のカスタムUIクラスは、モジュール名を古いターゲット名に設定していました。
ターゲット名を新しい名前に変更しましたが、現在は正常に機能しています。
通常これが私に起こるとき、@ 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
私は過去に同様の問題を抱えていたことを覚えています、私は行を変更することによってそれを解決しました:
_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] ...
"を使用します。
問題は解決しました。
エラーメッセージの詳細が欠けていることを特定するのは面倒なので、これが役立つことを願っています...
よろしくハイダーサティ
この問題は、Interface Builderの別のXIBファイルで小さなサブビューを設計し、IBでそれを親ビューと同じクラスに設定する場合にも発生します。
あなたがそれからこのようにそれを示すならば:
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"NameOfTheSubviewNibFile" bundle:nil];
[self.view addSubview:vc.view];
ビューは表示されますが、ファイル所有者にIBOutlets
が接続されている場合は、エラーメッセージが表示されます。だから、これは代わりに動作するはずです:
IBOutlet UIView *mySubview
を宣言します。mySubview
に設定します。[[NSBundle mainBundle] loadNibNamed:@ "NameOfTheSubviewNibFile"所有者:自己オプション:nil] [self.view addSubview:mySubview];
そしてあなたは元気になります!
もう1つのトリッキーなケース:
IBでは、ViewControllerをストーリーボードに追加し、そのビューを削除し、カスタムクラスを "MyViewController"に設定してビューをMyViewController.xibからインスタンス化しました。
ストーリーボードIDを同じ "MyViewController"に指定すると、例外が発生します。
ストーリーボードIDを別の名前に変更すると問題が解決します。