プロジェクトに新しいnibファイルを追加し、それをロードしようとしました。
しかし、作成したビューに移動するはずのツールバーアイコンをクリックすると、NSInternalInconsistencyException
というメッセージが表示されます。
キャッチされていない例外 'NSInternalInconsistencyException'のためにアプリケーションを終了しています、理由: ' - [UIViewController _loadViewFromNibNamed:bundle:] "..." nibが読み込まれましたが、ビューアウトレットが設定されていませんでした。
それで私は自分のnibファイルを開いた、そして参照用のアウトレットが設定されていないという見方を見る。しかし、「新しい参照アウトレット」の円をクリックしてFile's Ownerにドラッグしようとしましたが、表示されないようにするにはどうすればよいですか。
ビューID - クラスIDが設定されていません。適切なクラスに設定した後、問題は解決しました。
あなたたちは正しいです、しかし私は新人であるのでそれをするためにすべてのステップを把握するのに少し時間がかかりました。これは私のために働いたものです:
これはJosh Justiceの提案ですが、グラフィカルな方法です(写真は私のものです)。
最後に、View Controllerはローリングコードでインスタンス化されます。
PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];
//OPTIONAL.This is how 'I' am interested in present the view controller.
[self.navigationController pushViewController:aFilterUserVC animated:YES];
私は一般的にファイルの所有者とビューの間の関係を作り直すことによってそれを修正することができます。ファイルの所有者から自分のビュー(IB内)にControlキーを押しながらドラッグし、ポップアップメニューからビューを選択します。
YourViewControllerの "view"プロパティに割り当てられたUIView(またはサブクラス)がありますか。
YourViewControllerのxibの左ペインにある[File Owner]を右クリックして、[view]アウトレットが設定されていることを確認します。そうでない場合は、ビューに設定してください。
これは間違いなく問題を解決します
XCode 4.6.3でも同じ問題がありました。私はMySettingsView.h
と.m
という名前のカップルファイルから始めましたが、MySettingsViewController.h
を支持してそれらを削除しました、しかしここで言及されたヒントの大部分を試みるにもかかわらず、それはまだエラーになりました、
2013-07-05 11:48:17.205 MyApp [39024:c07] ***キャッチされていない例外 'NSInternalInconsistencyException'のためアプリケーションを終了しています、理由: ' - [UIViewController _loadViewFromNibNamed:bundle:]「MySettingsView」nibがビューアウトレットにロードされました設定されていませんでした。」
MySettingsView Controller 。xibの代わりにMySettingsView.xibをロードしようとしているのは明らかにまだ "混乱"していました。たぶんその「私が言っていることをやる」というロジックはあまりにも空想的です。
だから私はMySettingsViewController.mでNIB/XIB名をハードコーディングすることで問題を回避しました:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}
私のためにここに記載されているすべてのものは https://stackoverflow.com/a/6395750/939501 それでも真のエラーでした、理由はABCViewという名前のViewクラスを作成し、後でそれを削除したからです私はABCViewControllerとしてView Controllerを追加したので、どういうわけかそれは新しいView Controllerで古いABCViewを参照していました、私はABCViewControllerを削除し、私の問題を解決した別の名前の新しいものを追加しなければなりません。
ありがとう
これに関する私の問題は、ビューが設定されていないクラスフォルダ内に重複したペン先があることが原因でした。 xcodeはビルド用に1つのペン先を選択し、次にプロジェクトをビルドしたときにもう1つのペン先を選択しているようです。もう片方を削除するだけです。いいね。やあ!
Xibメソッドを使用してUIViewを作成していてこの問題を抱えている人には、接続インスペクタメニューの下に「表示」アウトレットがないことに気付くでしょう。しかし、File's OwnersカスタムクラスをUIViewControllerに設定すると、 "view"アウトレットが表示されます。これはアウトレットをCustomViewにCMND接続するだけです。
私はこれを私の手で修正しました。大規模プロジェクト、2つのファイル1つは「ReallyLargeNameView」、もう1つは「ReallyLargeNameViewController」です。
上記で選択した2番目の答えに基づいて、私は自分のビルドをきれいにするべきだと決心しました。灘、しかし私はまだXCodeの疑いがありました(私は2つの同じクラスがあるので、それらを抽象化する必要がありますeh ...)ファイルの所有者名は、コピーと貼り付け、アウトレットの再接続、xCodeの再起動、そしてまだ何もしない限りです。
だから私は(ビューである)同様の名前付きクラスを削除します。まもなく、新しいエラー「アウトレットアウトレットがフックされていません」は文字通り「webViewではなくキー値」でした...基本的に「Visual Studioの方が良い」と言っていました。とにかく...私は小さい名前のファイルを消去し、そしてばあ、それは動作します。
XCodeは同じ名前のファイルと混同されています。そして、プロジェクトは少し再起動する必要があるほど十分に大きいです、それはそれの一部かもしれません。
「XCodeは混乱しています」よりも技術的な回答をしてほしいのですが、xCodeはこの時点ではかなり混乱してしまいます。私が小さな子供を助けるのと同じ方法でそれを混同しないでください。今では動作します、:)上記の方法で何も解決されない場合は、他の人に役立つはずです。
常にあなたのビルドをきれいにすることを忘れないでください(シミュレータも削除することによって)。
私のビュープロパティがnibからそれを起動したときに私のビューコントローラに設定されていない理由を見つけることを試みるのに1時間以上を費やしただけです。 View ControllerのinitWithNibNameの中で、 "[super initWithNibName ...]"を呼び出すことを忘れないでください。
私は同じ問題を抱えていて、私の問題は私が他のローカライズ版(英語)をViewControllersペン先に追加したので、ローカライズ版ドイツ語の私のアプリはローカライズ英語のペン先を見つけることができませんでした!これが誰かに役立つことを願っています!
誤ってxib参照を削除して再度追加したときにも同じ問題が発生しました。Files所有者とビューの間の接続を確立することで解決しました。FilesOwnerのカスタムクラスが必ずviewControllerになるようにしてください。
ViewControllerが存在するstoryboardファイルを開くか、XIBtextEdit.appで関連ファイルを開いて、ストーリーボードがまたはXIB名がviewControllerと同じである場合、それを変更し、Xcodeを保存してリロード/再起動します。
私の場合は、*** ViewControllerクラスの指定イニシャライザ- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
が実装されているので、他のイニシャライザを呼び出してオブジェクトを初期化しても、指定イニシャライザが呼び出されます。
そのため、この問題を解決するには- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
をチェックするのも適切な方法です。
私にとっては、この問題はinitWithNibName:bundle:
の呼び出しが原因でした。私はtableViews
の上に座るエントリーフォームを定義するためにnibファイルからのTable View Cellを使っています。私は見解を持っていないので、それに引っ掛かることは意味がありません。代わりに、代わりにinitWithStyle:
メソッドを呼び出し、その中からnibファイルをロードすると、期待通りに動作します。
私は同じ問題を抱えていましたが、別の解決策が求められました。この場合の問題は、ファイル所有者のクラスがxibファイルに接続されていなかったことです。
私は同じ問題を抱えていたが、少し異なる解決策が求められた。この場合の問題は、ビューのクラスではなく、ファイル所有者のクラスでした。これを設定するには、Interface Builderウィンドウの左下隅にある「後方再生」アイコンをクリックしなければなりませんでした。そうするとファイル所有者、ファーストレスポンダ、そしてビューの特性を分離するオプションが現れました。最初のもの(大きな透明なボックス)をクリックすると、上記のようにカスタムクラスを設定することができました。
今夜はSwift UIViewControllerサブクラスで、非常によく似たものに出会いました。この場合、上記の修正はどれもうまくいきませんでしたが、コードの順序を少し変えるだけでした。サブクラスの拡張を持つNet-netは、同じファイル内のサブクラスの定義自体がXCodeを混乱させるように見えます。修正は、サブクラスの定義の後に拡張子を配置することでした。
詳細を掲載しました この類似した質問に対する回答の中に 。
私はXcode 9.3で同様の問題を抱えていました、そして、プロジェクトモジュールに "File Owner's"属性インスペクターの下の "Module"を設定することは私のためにこれを直しました。
私の場合、ビューはxibでは表示されませんでした。 xibでは、ビューはsize = noneでした(4番目のタブの右側)。サイズをFreeformに設定してxCodeをリロードします。 viewが上訴され、適切なリンクをViewに設定しました。
カスタムinitメソッドを使用している場合、有効なものを返していることを確認してください。私はこのような何かでクラッシュしたコードに遭遇しました:
- (id)init {
self = [super init];
if (self) {
CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
} return self;
}
別のクラスでは、コントローラーは次のように作成されました。
CustomController *controller = [[CustomController alloc] init];
問題は、initメソッドでは、selfが変更されておらず、代わりに次のように見える必要があることです。
- (id)init {
self = [super init];
if (self) {
CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
[controller viewDidLoad];
self = controller;
} return self;
}
私のプロジェクトでも同じエラーがありましたが、理由が異なります。私の場合は、カスタムUITableViewControllerクラスに "View"という名前のIBOutletを設定しました。私は "view"が基本クラスのメンバーであるため特別であることを知っていましたが、View(別の場合)も問題になるとは思わなかった。私はCocoaのいくつかの領域が大文字と小文字を区別しないと思います、そしておそらくxibをロードすることはそれらの領域の1つです。だから私はただそれをDefaultViewに改名しただけで今はすべてうまくいっている。
ファイルの所有者を選択して、IDインスペクタを開いて、対応するクラス名を指定します。上記の方法のどれもうまくいかず、それでもあなたがビューアウトレットを見ることができないならば、File's Ownerに新しい参照アウトレットConnection接続を与えると、あなたはビューアウトレットを見ることができます。ビューアウトレットをクリックして、ビューアウトレットとファイルの所有者の間の接続を確立します。アプリケーションを実行してくださいこれはうまくいきます。
私にとっては、それが起こったとき
UIView このViewControllerからサブビューとして別のビューにロードする必要があります。
我々はこのような何かを呼ぶでしょう
-(void)initCheckView{
CheckView *pCheckViewCtrl = [CheckView instance];
pCheckView = [pCheckViewCtrl view];
[[self view]addSubview:pCheckView];
[pCheckViewCtrl performCheck];
}
どこで
+(CheckView *)instance{
static CheckView *pCheckView = nil;
static dispatch_once_t checkToken;
dispatch_once(&checkToken, ^{
pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
if ( pCheckView){
[pCheckView initLocal];
**[pCheckView loadView];**
}
});
return pCheckView;
}
ここにloadViewがありませんでした、、、この行を追加して私の問題を解決しました。
私はスティーブンJを2度目にしたいのですが、ときどきXコードが混乱することがあります。私はちょうど私がUIでたくさん遊んだ経験がありました、そしてアウトレットをかなり数回追加して、そして削除しました。コンセントはもう配線しないでしょう。私は特定の理由を考え出すことはしませんでした(私は上記のすべての解決策を試してみました)、そして私はNIBを削除して最初からそれを作り直さなければなりません(XCode 4.6.1)2、3時間無駄にしました。
@objc
で異なる名前空間を参照するSwiftコードがある場合、Objective-Cクラス名を使用してください。
@objc(NamespacedSomeViewController)
class SomeViewController: UIViewController {
....
この場合、IBでNamespacedSomeViewController
を使用する必要があります。
以前の答えは ほぼ 私のために問題を解決しましたが、最後のステップはありませんでした。
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
追加した@IBOutletが添付されます。
乾杯、リチャード
すべて試してもまだこのエラーが発生する場合は、クラスファイルを最初から作成し直しますが、[XIBファイルも作成する]チェックボックスをオンにします。これは、これらのファイルを別々に作成するときにリンクされていないいくつかの項目を自動的にリンクアップします。これが作成された後、あなたはたぶん新しいXIBにすべてをカットアンドペーストすることができます、そしてそれはうまくいくはずです。
私はSwiftでファイルを別々に作成することでこの問題を見つけています。