55

私の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;
}

前もって感謝します

4

20 に答える 20

128

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

その後、プロジェクトにファイルを再インポートすると、すべて問題ありません。

于 2012-12-18T10:38:41.710 に答える
18

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

于 2013-03-15T20:17:18.430 に答える
17

エラーは、プロジェクトで「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ファイルがありますか。

于 2012-10-04T08:08:46.153 に答える
10

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

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

「shelfcell」は私のxibファイル名でした。しかし、「ShelfCell」、「shelfCell」などと綴りを間違えたため、例外が発生しました。ですから、あまり頭を悩ませないでください。コード行とスペルを確認してください。ありがとうございました

于 2013-08-01T09:29:53.327 に答える
9

私はいくつかのサブプロジェクトを持っています。

メインプロジェクトの Copy Bundle Resources ビルド フェーズに xib ファイルを追加することで、この問題を解決しました。

于 2014-06-05T07:50:16.953 に答える
9

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

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

解決:

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

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

SecondView.xib を開きます (これは FirstView.xib からコピーされたものです)。

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

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

  • SecondView.xib を右クリックし、「ID とタイプ -> ターゲット メンバーシップ」が有効になっていることを確認します。
  • 「ビルド フェーズ -> バンドル リソースのコピー」に SecondView.xib が表示されていることを確認します。
  • また、xib ファイルを実際に更新するには、アプリをクリーンにビルドしてシミュレーターから削除する必要があることもありました。シミュレーターには、少し一貫性のない xib ファイル用の内部キャッシュがあります。
于 2014-01-25T21:44:41.930 に答える
1

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

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

かわった

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

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

そしてそれは働いた

于 2013-10-23T21:03:51.337 に答える
1

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

于 2015-05-07T08:36:33.920 に答える
1

ここに画像の説明を入力

ID インスペクターで対応する識別子を使用してクラス名を変更し、属性インスペクターで識別子を変更すると、期待どおりに動作するはずです。

于 2020-02-20T13:30:38.893 に答える
0

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

それ以外の:

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

固定:

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

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

于 2018-11-26T18:39:35.217 に答える