web-dev-qa-db-ja.com

NSInternalInconsistencyException '、理由:'バンドルのNIBをロードできませんでした: 'NSBundle

AppDelegateには、理解できない問題があります。 RootViewControllerは最初はViewControllerを呼び出し、名前を変更しました。アプリケーションは多くのViewControllerによって形成され、UINavigationControllerを導入しました。なぜこのエラーが発生するのですか?

  NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle 
  /Users/XXXXXXXXXXXX/Library/Application Support/iPhone simulator/6.0/Applications/
  B7A7D461-1CFE-4B05-AF32-00B65FCFFF49/XXXXXXXXXX.app> (loaded)'with name 
 'RootViewController''

  *** First throw call stack:
  (0x1992012 0x1357e7e 0x1991deb 0x4bafac 0x37fe37 0x380418 0x380648 0x380882 0
  x380b2a  0x397ef5 0x397fdb x398286 0x398381 0x398eab 0x398fc9 0x399055 0x49e3ab 
  0x2ef92d 0x136b6b0 0x1f12fc0 0x1f0733c 0x1f12eaf 0x38e8cd 0x2d71a6 0x2d5cbf 
  0x2d5bd9 0x2d4e34 0x2d4c6e 0x2d5a29 0x2d8922 0x382fec 0x2cfbc4 0x2cfdbf 
  0x2cff55 0x2d8f67 0x2b30 0x29c7b7 0x29cda7 0x29dfab 0x2af315 0x2b024b 0x2a1cf8 
  0x1dbedf9 0x1dbead0 0x1907bf5 0x1907962 0x1938bb6 0x1937f44 0x1937e1b 0x29d7da
  0x29f65c 0x269d 0x25c5) 
  ibc++abi.dylib: terminate called throwing an exception
  (lldb) 

これはAppDelegate.hのコードです

  #import <UIKit/UIKit.h>

  @class RootViewController;

  @interface AppDelegate : UIResponder <UIApplicationDelegate>{

       UINavigationController *navigationController;
   }

  @property (strong, nonatomic) UIWindow *window;

  @property (strong, nonatomic) RootViewController *viewController;
  @property (strong, nonatomic) UINavigationController * navigationController;



  @end

これはAppDelegate.mのコードです

  #import "AppDelegate.h"

  #import "RootViewController.h"



  @implementation AppDelegate

  @synthesize navigationController;
  @synthesize viewController;
  @synthesize window;



  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
 {
         self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.

         if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
               self.viewController = [[RootViewController alloc]      initWithNibName:@"RootViewController_iPhone.xib" bundle:nil];
   } else {
    self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad.xib" bundle:nil];
   }

    RootViewController *rootMenu=[[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];

    self.navigationController =[[UINavigationController alloc]initWithRootViewController:rootMenu];

    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

前もって感謝します

42
Adriana Carelli

このエラーは、XCodeの外部でファイルの名前を変更したときに発生する可能性があります。解決するには、プロジェクトからファイルを削除するだけです(右クリック-[削除]および[参照の削除])。

その後、プロジェクト内のファイルを再インポートすると、すべてが正常になります。

95
Daniel C.

「initWithNibName:」のnib名から「.xib」を削除してみてください。ドキュメントによると、「。xib」が想定されているため、使用しないでください。

18
paiego

さて、このエラーは、プロジェクトで「RootViewController」という名前のnibファイルを見つけることができないと言っていると思います。

これらのコード行を書いていますが、

self.viewController = [[RootViewController alloc]      initWithNibName:@"RootViewController_iPhone.xib" bundle:nil];

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad.xib" bundle:nil];

同時に、「RootviewController」という名前のnibファイルをロードするように求めています。それはどこにある..? 「Rootviewcontroller」という名前のxibファイルはありますか?

17
akshaynhegde

私は同じ問題を何度も経験しました。私が見つけたのは、リンクしているxibファイルのスペルが常に間違っているということです。私の場合、これは例外につながるコード行です。

* NSArraynib = [[NSBundle mainBundle] loadNibNamed:@ "shelfcell" owner:self options:nil];

「シェルフセル」は、私のxibファイル名でした。しかし、私はそれを「ShelfCell」、「shelfCell」などと間違ってつづり、例外につながりました。だから、頭を悩ませるな。コードの行とスペルを確認してください。ありがとうございました

10
Reeshna

サブプロジェクトがいくつかあります。

mainプロジェクトのバンドルリソースのコピービルドフェーズにxibファイルを追加することで、この問題を解決しました。

9
kaspartus

これは、xibファイルの名前を変更し、それが参照されているすべての場所の変更を忘れた場合にも発生する可能性があります。

例:MainWindow.xibは、関連するxibファイルFirstViewを持つFirstViewControllerという名前のカスタムViewControllerを含むTabBarControllerです。名前をSecondViewControllerに変更し、関連付けられたxibファイルをSecondViewに変更します。

解決:

(TabBarControllerを含む)MainWindow.xibを開きます。

  • 変更したViewControllerのタブを選択します。
  • IDインスペクターで、カスタムクラス名をSecondViewControllerに変更します。
  • 属性インスペクターで、xib名をSecondViewに変更します。

SecondView.xibを開きます(これはFirstView.xibからコピーされました):

  • Identity Inspectorで、カスタムクラスをSecondViewControllerに変更します。

オプションで、次のことが必要になる場合があります。

  • SecondView.xibを右クリックし、「IDとタイプ->ターゲットメンバーシップ」が有効になっていることを確認します。
  • 「ビルドフェーズ->バンドルリソースのコピー」にSecondView.xibが表示されていることを確認します
  • また、xibファイルを実際に更新するには、きれいにビルドしてシミュレーターからアプリを削除する必要がある場合もありました。シミュレータにはxibファイル用の内部キャッシュがありますが、これは少し矛盾しています。
8
arinmorf

私のために、

必要なターゲットにそのペン先をインストールしませんでした。

ステップ1: Project Navigatorでペン先をクリックします(つまり、最初の左のタブ)

ステップ2:ファイルインスペクターに移動します(つまり、最初の右のタブ)

ステップ3:ターゲットメンバーシップに移動し、ペン先を使用するターゲットにチェックマークを付けます。

8
Zaid Pathan

このエラーには非常に多くの理由があります。

サードパーティのフレームワークを追加し、それをコピーバンドルリソースに含めないことも可能かもしれません。

これを次のように行います。ターゲット-> BuildPhases-> CopyBundleResources->フレームワークをドラッグアンドドロップしてコードを実行します。

3
Imran

何が間違っているのかを見つけるのに1時間かかります。

Build -> Clean All

受け入れられた解決策もおそらく機能します..しかし、これで十分でした。

1
Mitchell

コレクションvcのinit(coder:constructorでオプションのself.collectionView?.backgroundColorを設定していました。

ViewDidLoadでセットアップを移動すると、例外はどういうわけか消えていました。不可解です。

1
Anton Tropashko

私はxibの名前を変更してこの問題が発生しました。メインのwindow.xibを手動で編集し、問題のテキストを変更することで解決できました。

関連するxibで問題のxib名を検索する(ソースコードとして表示)

かわった

<viewController nibName="OldNibName" id="116" customClass="SomeViewController">

<viewController nibName="NewNibName" id="116" customClass="SomeViewController">

そしてそれは働いた

1
gheese

また、ターゲットにXIBファイルが含まれていることを確認してください。 XIBファイルが選択されているときにファイルインスペクターを確認します(右側の最初のタブ、中央に「ターゲットメンバーシップ」セクションがあります。ビルドするターゲットをチェックする必要があります。そうしないと、XIBファイルは含まれません。

1
Steven Delrue

私はいくつかのことを試しましたが、最終的には、問題の.xibファイルを削除(およびゴミ箱に移動)することが効果的でした。その後、再作成します。作業を簡単にするために、.xibの内容を一時的に別の.xibにコピーしてから、新しく作成したものにコピーして戻しました。

0
guptron

ViewControllerのビューにgestureRecognizerを追加しようとしていて、ターゲットが自己ではなくビューであった場合、このエラーが発生していました:

の代わりに:

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(handleTap(_:))))

修正済み:

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))))

そして、エラーはなくなりました。

0
sabius

私はこのエラーに何度も直面しましたが、このエラーが発生する理由を調査し、最後にこのエラーをキャッチしました。このエラーは、スペルミス.xib ファイル名。

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];

この時点で、TableViewCellTabelViewCellとしてつづりを間違えました。これは、それを正しいと読んだときの認識が最も一般的な問題だからです。 .xibファイル名を入力して貼り付けます。

0
Rahul Panzade

[self class] nibName]を使用している場合、Swiftを使用している場合は異なる名前を返す可能性があります...返されると予想される名前とは異なる場合があります。

特に、コードのターゲットが複数ある場合。

その場合、オーバーライドしてみてください:

override var nibName: String?{
        return "YourXibFileName" // No .xib at the end :)
}
0
R.Kito

IOSアプリの開発中、私も同様の問題に直面しています。 xcodeの単純な再起動はうまくいきます。これが何らかの助けになることを願っています。

0
kttailor4u