"NSInternalInconsistencyException", причина: '- [UIViewController _loadViewFromNibNamed: bundle:] загрузила иглу GameView, но не была установлена ​​точка просмотра

Это не та же ситуация, что и множество других подобных вопросов.

* Завершение приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: '- [UIViewController _loadViewFromNibNamed: bundle:] загрузила иглу GameView, но не была установлена ​​точка просмотра.

Возможно, вы думаете: "Делайте, как говорится, подключите владельца файла к представлению в IB!". Но дело в том, что у меня даже нет GameView.xib в моем проекте или даже в каталоге проекта.

У меня есть "GameViewController.m" и сопоставление "GameViewController.xib" в моем проекте. Использование этого GameViewController - это то, что вызывает эту ошибку, но я не понимаю, откуда эта идея пытается загрузить "GameView.xib". Не следует ли вместо этого использовать "GameViewController.xib"?


Если я grep мой каталог проекта, я вижу, что он ссылается на "UserInterfaceState.xcuserstate".

<string>file://localhost/Users/bemmu/Dropbox/b2/iphone/ValleyStory/ValleyStory/GameView.xib</string>

Этот упомянутый файл не существует. Возможно, у меня был файл с этим именем и переименовал/удалил его, но на него не ссылались нигде, что я вижу в IB.

Мне удалось запутать xcode?

Ответ 1

Проверьте файлы nib, которые вы используете (например, MainWindow.xib). Если вы загружаете GameViewController из наконечника, проверьте файл, из которого он загружается (под вкладкой info в инспекторе). Убедитесь, что он установлен в "GameViewController", а не "GameView".

Ответ 2

Мое решение было немного другим.

  • Нажмите на построитель xib в интерфейсе
  • Выберите владельца файла слева.
  • Откройте инспектор подключений владельца файла
  • Если свойство view еще не подключено, перетащите его на значок представления (под значком файла и значками первого ответчика).

Ответ 3

У меня тоже была эта проблема, но мне пришлось ее решать по-другому. В принципе, у меня есть имя контроллера контроллера MainViewController, у которого есть xib с именем MainViewController.xib. Этот элемент имеет свойство view, установленное на File Owner, который был MainViewController.

Я также сделал файл MainView.xib, содержащий представление, которое будет программно добавлено к представлению, определенному в MainViewController.xib, и оно просмотрит. Он в основном инкапсулировал внутренний вид, который был бы в представлении MainViewController.xib, а также имел бы File Owner установлен в MainViewController.

Итак, в основном, я хотел, чтобы MainViewController.xib загружался в качестве элемента для объекта MainViewController и внутри MainViewController, в какой-то более поздний момент я бы добавил внутренний вид, указанный в файле MainView.xib.

Возникла пара вопросов:

1.) Я нашел в документах Apple, что при загрузке контроллера просмотра через раскадровку или нить:

"Если имя класса контроллера представления заканчивается словом" Controller ", в MyViewController он ищет файл nib, имя которого соответствует имя класса без слова" Контроллер ", как в MyView.nib.

Он ищет файл nib, имя которого соответствует имени представления класс контроллера. Например, если имя класса MyViewController, он ищет файл MyViewController.nib."

Следовательно, у вас не может быть низа, называемого MainView.xib, если у вас также есть наконечник, называемый MainViewController, и хотите, чтобы MainViewController.xib был основным символом для MainViewController.

2.) Даже если вы удалите MainView.xib или переименуете его в другое место (в этом случае MainInternalView.xib), вы ДОЛЖНЫ удалить/очистить симулятор iOS, поскольку старый файл nib (MainView.xib) по-прежнему останется в приложение. Он не перезаписывает весь пакет приложений при перестройке/повторном запуске приложения.

Если вы не хотите использовать reset параметры своего контента (возможно, у вас есть некоторые данные, которые вы хотите сохранить), щелкните правой кнопкой мыши ваше приложение в папке iOS Simulator, покажите содержимое пакета, найдите MainView.nib, и удалите его. Xcode НЕ будет делать это автоматически для вас при перестройке, поэтому нам нужно вручную удалить старый наконечник.

В целом, не делайте ниги с именем MainViewController и MainView, т.е. с одним и тем же префиксом. Вызовите MainView.xib что-то еще, например MainInternalView.xib.

Ответ 4

Недавно я решил эту проблему. Убедитесь, что вы создали резервную копию своего проекта, прежде чем следовать приведенным здесь шагам (на всякий случай). Эти шаги решили мою проблему.

  • Выйти из Xcode
  • Перейдите в UserInterfaceState.xcuserstate, расположенный в .xcodeproj/project.xcworkspace/xcuserdata/<username>.xcuserdata, и удалите файл.
  • Повторно открыть Xcode. Xcode создаст новый UserInterfaceState.xcuserstate, который будет чистым.

Ответ 5

В моем случае я вообще не использовал xib. Мне нужно было удалить файл .m из Build Phases > Compile Sources и добавить его обратно.

Ответ 6

Учитывая, что вы ссылались на него ранее, это звучит так, как будто xcode не отменяет его, больше не существует. В меню "Продукт" выберите "Очистить", а затем "Построить", надеюсь, это пройдет мимо старой справки для вас.

Ответ 7

Лицом к той же проблеме, пришлось изменить имя представления в коде:

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"WrongViewName" bundle:nil];

Для

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"RightViewName" bundle:nil];

Ответ 8

У меня было несколько просмотров и случайно (я не знаю, как это произошло), но у моего фонового представления не было владельца файла, поэтому для всех, у кого есть эта проблема в будущем, убедитесь, что все ваши взгляды иметь владельца файла.

Ответ 9

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

Ответ 10

UIViewController ищет нить с тем же именем, что и контроллер, когда передано nil на initWithNibNamed:bundle: Проверьте правильность имени файла, которое вы передаете инициализатору!

Например: (например, [[CCVisitorsController alloc] initWithNibName:nil bundle:nil], тогда UIViewController пытается загрузить nib с именем CCVisitorsController по умолчанию.

Если этот файл не существует, выдается ошибка, о которой вы говорили.

Ответ 11

У меня была эта проблема, потому что я делал что-то плохое в

  • (id) initWithCoder: (кодер NSCoder *)

который загружает NIB.

Ответ 12

В моем случае эта ошибка была вызвана немой ошибкой - я удаляю просмотр _view dumb error