Подтвердить что ты не робот

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

Заранее спасибо

4b9b3361

Ответ 1

Эта ошибка может возникать при переименовании файлов вне XCode. Чтобы решить проблему, вы можете просто удалить файлы из своего проекта (Щелкните правой кнопкой мыши - Удалить и "Удалить ссылку" ).

Затем после того, как вы сможете повторно импортировать файлы в свой проект, и все будет в порядке.

Ответ 2

Просто попробуйте удалить ".xib" из имени nib в "initWithNibName:". Согласно документации, ".xib" предполагается и не должен использоваться.

Ответ 3

Ну, я думаю, что ошибка говорит, что он не может найти файл nib с именем "RootViewController" в вашем проекте.

Вы пишете эти строки кода,

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

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

В то же время вы просите его загрузить файл с именем "RootviewController"..!! Где это..? У вас есть xib файл с именем "Rootviewcontroller"..?

Ответ 4

Я неоднократно сталкивался с той же проблемой. То, что я нашел для себя, это то, что файл xib, который я связываю, всегда будет ошибочным. В моем случае это строка кода для меня, которая приводит к исключению:

* NSArray nib = [[NSBundle mainBundle] loadNibNamed: @ "владелец полки": собственные параметры: nil];

"shelcell" - это мое имя файла xib. Но я неправильно назвал его "ShelfCell", "shelfCell" и т.д., Что привело к исключению. Так что не будьте сильно голова. Проверьте строки кода и варианты написания. Спасибо вам

Ответ 5

У меня есть некоторые подпроекты.

Я решил эту проблему, добавив xib файл в фазу "Копирование компонентов Bundle" проекта main.

Ответ 6

Это также может произойти, если вы измените имя своего xib файла, и вы забудете изменить все места, на которые оно ссылается.

Пример: MainWindow.xib - это TabBarController, который содержит настраиваемый ViewController с именем FirstViewController со связанным файлом xib FirstView. Вы меняете имя на SecondViewController и связанный файл xib на SecondView.

Решение:

Откройте MainWindow.xib(который содержит TabBarController):

  • Выберите вкладку, которую вы изменили для ViewController.
  • В инспекторе Identity измените имя пользовательского класса на SecondViewController.
  • В инспекторе атрибутов измените имя xib на SecondView.

Откройте SecondView.xib(это было скопировано из FirstView.xib):

  • В Identity Inspector измените пользовательский класс на SecondViewController.

Возможно, вам может понадобиться:

  • Щелкните правой кнопкой мыши SecondView.xib, убедитесь, что включено "Идентификация и тип- > Целевое членство".
  • Убедитесь, что "Build Phases → Copy Bundle Resources" показывает ваш SecondView.xib
  • Я также обнаружил, что мне иногда нужно было создать чистую и удалить приложение из симулятора, чтобы получить фактически обновленный файл xib. Симулятор имеет внутренний кеш для xib файлов, который немного несовместим.

Ответ 7

Для меня,

Я не установил этот кончик в нужной цели.

Шаг 1: Нажмите на перо в Навигаторе проекта (т.е. В первой левой вкладке)

Шаг 2: Зайдите в File Inspector (т.е. в первую правую вкладку)

Шаг 3: Перейдите к целевому членству и отметьте цель, в которой вы хотите использовать свое перо.

Ответ 8

Есть так много причин для этой ошибки. Я также получил один и решил его.

Возможно, вы добавите стороннюю структуру и не включаете ее в ресурсы копирования Bundle. Это решило проблему для меня.

Сделайте это следующим образом. Перейти к Target → BuildPhases → CopyBundleResources → Перетащить фреймворк и запустить код.

Ответ 9

Я переименовал xib и столкнулся с этой проблемой, решение для меня состояло в том, чтобы вручную отредактировать главное окно .xib и изменить нарушающий текст

найти несоответствующее имя xib в соответствующем xib (представление как исходный код)

изменилось

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

с

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

и он работал

Ответ 10

Также убедитесь, что XIB файл включен в вашу цель. Проверьте файл-инспектор, когда выбран XIB файл (первая вкладка справа, посередине есть раздел "целевое членство" ). Целевую цель, которую вы создаете, должна быть проверена, иначе XIB файл не будет включен.

Ответ 11

Я устанавливал необязательный self.collectionView?.backgroundColor в init (coder: конструктор моей коллекции vc.

Как только я переведу эту настройку в viewDidLoad, исключение каким-то образом исчезло. озадачивает.

Ответ 12

Я провожу час, чтобы выяснить, в чем дело. Но Clean Project сделал свое дело.

Build -> Clean All

Принятое решение, вероятно, тоже работает.. но этого мне было достаточно.

Ответ 13

При разработке приложения ios я тоже сталкиваюсь с подобной проблемой. Простой перезапуск xcode работает для меня. Надеюсь, это поможет кому-то.

Ответ 14

Я пробовал несколько вещей, наконец, для меня работало удаление (и переход на мусор) файла .xib. Затем заново создайте его. Чтобы все было проще, я скопировал материал в .xib временно на другой .xib, а затем скопировал его обратно во вновь созданный.

Ответ 15

Я столкнулся с этой ошибкой много времени, также исследую, почему эта ошибка возникает и, наконец, я поймал эту ошибку, эта ошибка - глупая ошибка, которая возникает, когда мы ошибочно написали имя файла .xib.

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

В этот момент я ошибся TableViewCell как TabelViewCell, потому что восприятие некоторого времени мы читаем как правильное, это самая распространенная проблема. Просто скопируйте имя файла .xib и вставьте его.

Ответ 16

Я получал эту ошибку, когда пытался добавить жестRecognizer в мое представление ViewController, и целью было представление, а не само:

Вместо:

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

Исправлено:

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

И ошибка исчезла.

Ответ 17

Обратите внимание, что если вы используете [self class] nibName] может возвращать другое имя, если вы используете swift... может отличаться от имени, которое вы ожидаете вернуть.

Особенно, если у вас есть несколько целей для вашего кода.

В этом случае попробуйте переопределить:

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

Ответ 18

Вы можете проверить файл xib с тем же именем, что и ваш класс файлов. По умолчанию XCode получит имя xib файла из класса имен файлов, поэтому, если их имена разные, XCode не сможет обнаружить из раскадровки Это работает со мной