Janrain EngageをAppcelerator Titaniumのカスタムモジュールとして統合しようとしています。 Jainrainのドキュメントに示されているように、サンプルモジュールを作成し、JREngageフォルダーをサンプルモジュールxcodeprojにドラッグしました。
次に、このプロジェクトにビルドコマンドを与え、./build.py
を実行し、最後にtitanium run
コマンドを実行します。空白の画面でシミュレーターでアプリケーションを起動すると、すぐにクラッシュして次のエラーがスローされます。
キャッチされない例外 'NSInternalInconsistencyException'によるアプリの終了、理由: 'バンドルでNIBをロードできませんでした:' NSBundle </ Users/abhilash/Library/Application Support/iPhone Simulator/4.2/Applications/CA167346-4091-4E16-B841-955D1D391713/「JRProvidersController」という名前のtest.app>(loaded)」
このエラーが発生するのはなぜですか?
ファイルインスペクターの.xibファイルのプロパティにアクセスします。選択ボックスの[ターゲットメンバーシップ]ピッチプロパティを使用して、xibファイルをターゲットにリンクしました
Targets -> Build Phases
.xibがCopy Bundle Resources
に追加されていることを確認し、存在しない場合は.xibファイルを追加します。
すべてを見つけよう
XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];
コード内で、XXXController
のスペルが正しいことを確認してください
Xcodeを3.2から4.02にアップグレードした後、同じ問題(「バンドルにNIBをロードできませんでした:..」)が発生しました。 Xcode 3.2を使用したアプリのデプロイは正常に機能しましたが、xcode 4でクラッシュし、上記の例外が発生しますが、IOS Simulator(v.4.2)にデプロイしようとした場合のみです。 IOSデバイス(v.4.1)をターゲットにすると、Xcode 4でも動作します。
理由は.xibファイルのほとんど「隠された」設定であることが判明しました(何時間も必死にスクラブした後)。
ファイルインスペクターで.xibファイルのプロパティにアクセスします。すべての.xibファイルのプロパティ「Location」は「Relative to Group」に設定されています。 「プロジェクトへの相対」に変更して、出来上がり:すべての.xibファイルがIOSシミュレーターに正しくロードされるようになりました!
この奇妙なXcode4の動作の背後にある理由は何なのか分かりませんが、試してみる価値があるのでしょうか?
私の場合、それは非常に奇妙でした(ストーリーボードを使用):何らかの理由で、plistの「メインストーリーボードファイルベース名」から「メインnibファイルベース名」に変更されました。
「メインストーリーボードファイルのベース名」(UIMainStoryboardFile)に戻すと、問題が解決しました
エラーは、"JRProvidersController"
という名前の.xibファイルがないことを意味します。 JRProvidersController.xib
が存在するかどうかを再確認してください。
.xib file
をロードします
controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
ストーリーボードでこの問題が発生し、ペン先は「bKD-J3-fhr-view-ZSR-8m-2da」などと呼ばれていました。
これは、View Controllerのinit(withCoder)でself.viewにサブビューを追加しようとしたためです。 Self.viewはまだ存在しません。
それをviewDidLoadに移動しました。
IOSデバイスの1つであるビルドターゲットを使用して、製品ファイル(xyzw.app)を右クリックし、Show in Finderポップアップ項目を選択しました。内部にxyzw.appを含むウィンドウを開きました。 Show Package Contentsを使用してバンドルを開き、名前に小文字のiの代わりに大文字のI(zoomieView.nibの代わりにzoomieVIew.nib)が含まれる1つのファイルを除いて、予期したすべてのファイルを見ました)。 xibのファイル名に大文字のIがあることに気付き、それを変更して再構築しました。明らかに、Xcodeは生成された.nib名をそのままにしておきました。バンドル内のzoomieVIew.nibを削除して再構築し、XcodeがファイルをzoomieView.nibとして正しく再作成しました。アプリはデバイスで動作し始めました。
Objective-C View ControllerでカスタムSwiftビューを使用して(はい、<<PROJECT NAME>>-Swift.h
ファイルをインポートした後でも)、次を使用してnibをロードしようとしました:
MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];
...しかし、NSStringFromClass([MyCustomView class])
は<<PROJECT NAME>>.MyCustomView
を返し、ロードは失敗します。 TL; DRすべては、文字列リテラルを使用してペン先をロードすることでうまく機能しました。
MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];
プロジェクトをご覧ください
Target -> Buid Phases -> Copy Bundle Resources
赤い色のxib/storyboradが見つかります。
削除するだけでなく、プロジェクトから欠落しているファイルのすべての参照を削除します。
このstoryboard/xibファイルを再びこのCopy Bundle Resources
にドラッグします。ファイルは引き続き赤色で表示されますが、心配する必要はありません。
ただきれいにしてプロジェクトをビルドします。
これで、プロジェクトが再び正常に実行されるようになります!!
MyCustomView.SwiftおよびMyCustomView.xibがフレームワークにある場合のSwift4の例。これをMyCustomViewのinitに配置します。
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
self.aViewInMyCustomView = nibView
self.aViewInMyCustomView.frame = self.frame
self.addSubview(self.aViewInMyCustomView)
// set constraints
self.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
}
また、@ "MyFile.xib"のような名前でXIBをロードしようとしたときに失敗することもわかりました。 @ "MyFile"を使用したときは動作しました-どうやら常に拡張子が追加されるようです。しかし、エラーメッセージは、バンドルにMyFIle.xibが見つからなかったと言っただけです。もしMyFile.xib.xibと言っていたら、それは大きな手がかりだったでしょう。
XIB名に挿入するときに.xibを入れないでください! IT ISはすでに暗示されています!
これをしないでください:
UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];
これを行う:
UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];
XIBファイルはおそらくプロジェクトフォルダー外にあります。これにより、ターゲットインスペクターが表示されなくなります。ただし、XIBファイルをプロジェクトフォルダーに移動すると修正されます。
Xcode 6.3を使用して面白い経験をしたばかりです。
上記のように、スペル、ターゲットメンバーシップなどで通常考えているすべてのことを試しても、このエラーが発生し続けました。また、バンドルが正しく構築されたが役に立たないことを確認するために、クリーニング、派生データの削除、およびシミュレーターからのアプリの削除も数回試みました。
最後に、Brian Michael Bentleyの回答に続いて、私はついにHDのシミュレーターのフォルダーにある.appファイルを調べることにしました。私はすべてのペン先がそこにあることを発見しましたが、予想されるabc.nibの代わりにabc〜ipad.nibを使用しました。 〜ipad部分を削除するためにこれらのファイルすべてを手動で名前を変更し、ビルドして機能しました!
これらに〜ipadキーワードが追加された理由を確認しようとして、プロジェクト設定を確認しました。実際、[全般]> [展開情報]タブで、iPadのみを選択しました。 iPhoneシミュレーターで実行しようとしていました。過去には、XcodeはバイナリがiPhoneをサポートしておらず、アプリの実行に成功しなかったことを示すエラーを表示すると信じていました。
シミュレーターからアプリを削除し、同じことを再度行いました-ここでもiPadのみがサポートされています。今回、.appには、予想される各ストーリーボードのabc〜iphone.nibとabc〜ipad.nibが含まれており、iPhoneシミュレーターで正常に実行されました。繰り返しますが、展開情報の設定でのみiPadを選択した場合、iPhone Simulatorで実行しないでください。これはXcodeのバグです。
そのため、Xcodeの一部には一貫性のない動作がいくつかあり、残念ながら断続的なバグであり、これを再現するのは難しいかもしれませんが、将来的に他の人に役立つようにここに配置します。
これと同じ問題が何も機能しなかったので、派生データに何かおかしなことがあると考えました。
Xcode 6.3.2では、以下を行う必要がありました。
XCodeメニューで->設定->場所タブ->場所で派生データを相対に変更してから、デフォルトに切り替えます
その後、ペン先は正常にロードされました。
Nibファイルの名前を変更すると発生します。既にある場合は、新しいnibを作成し(現在のnibファイルの内容を新しいnibにコピーすることを意味します)、古いnibファイルを削除すると、問題が解決します。
編集:バージョン4.6.3以降の新しいXcodeでは、コントローラクラスの名前を変更(リファクタリング機能を使用)すると、nibファイルの名前も変更されるため、nibのロードの問題を心配する必要はありません。
ストーリーボードの場合
ここに投稿されたすべてのソリューションを試してみましたが、StoryboardをSwift 5で使用しているので、何もうまくいきませんでした。
ストーリーボードテストアプリで新しいコントローラーとビューの構築を始めたばかりですが、見つけたのは、View ControllerのストーリーボードIDが欠落していたことです。
だからここに私の解決策があります、ViewController Aから移動したい場合-> View Controller B
ステップ1。ストーリーボード内:ViewControllerAがNavigation Controllerに埋め込まれていることを確認してください
ステップ2。ストーリーボード内:ここで、ViewControllerBのストーリーボードIDについて言及しましたかコードで識別子として使用します。
ステップ3。最後に、ボタンをクリックしてViewControllerAでこの方法でコントローラーをプッシュしていることを確認します。
if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {
if let navigator = navigationController {
navigator.pushViewController(viewControllerB, animated: true)
}
}
Xcode 4.6.3で作業し、NIBファイルをローカライズすると、この問題も発生します。
私にとっては、File Inspectorの「Document Versioning」を6.1ではなくDeployment 5.0に変更する以外に何も助けませんでした。
注意:Xcodeはファイル名の大文字小文字を区別します。 「楽しい」と同じ「楽しい」ではありません。
プロジェクトでフレームワークを使用している場合、正しいバンドルからロードしていることを確認する必要があります。
NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
[self.navigationController pushViewController:secondViewController animated:YES];
上記のコードで、「SecondView.xib」のようなファイル拡張子も指定した場合、それは間違っており、上記のエラーが表示されます。代わりに「SecondView」を使用してください。私はその間違いを犯しました。
Gitでブランチを切り替えて、クリーンにするのを忘れると、それが起こるかもしれないことに気付きました。したがって、xibが存在し、すべてが見つかっていますが、正確なビルドには問題がある可能性があります。念のためきれいにすることを忘れないでください
これは私のために働いています..ペン先名を正しく入力したことを確認してください。
[[NSBundle mainBundle] loadNibNamed:@ "Graphview" owner:self options:nil];
Graphview(ペン先名)
古いコードをXCode 3xからXCode 4に変換するときにこの問題が発生し、wwwwwwww.xibをRootViewController.xibに名前を変更するだけで解決しました。
私も同じ問題を抱えていました。ストーリーボードでView Controller識別子の名前を変更するとうまくいきました。
私は同じ問題に遭遇しました。私の場合、ペン先名は「MyViewController.xib」であり、「MyView.xib」に名前を変更しました。これはエラーを取り除きました。
また、プロジェクトをXCode 3から4.2に移行しました。パスタイプの変更は重要ではありません。
また、ローカライズを台無しにしたときに、ファイルが間違った言語固有のフォルダーで検索される可能性もあります。
AppDelegateにあるView Controllerの名前をリファクタリングするたびに、これに時間を無駄にします。リファクタリングでは、initWithNibName:@ "MYOldViewControllerName"のnib名は変更されません。
私にとっては、セルのファイル名をクラスと同じ名前に変更するだけで解決しました。
属性インスペクター(ストーリーボードの右側のバーの3番目のタブ):
次のようにView Controllerにセルを登録します。
tableView.register(UINib(nibName: "MyCellClass"、bundle:nil)、forCellReuseIdentifier: "MyCellId")
同じ問題が発生し、.xib
ファイルは既にTarget Membership
でプロジェクトにリンクされています。次に、ファイルのターゲットチェックボックスをオフにして再度チェックし、Clean
およびBuild
プロジェクトを選択しました。興味深いことに、それは私のために働いています。