"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]()