Загруженный наконечник, но выход "вид" не установлен

Я добавил новый файл nib в свой проект и попытался загрузить его.

Однако, когда я нажимаю на значок панели инструментов, который должен взять меня в созданное мной представление, я получаю сообщение NSInternalInconsistencyException с сообщением:

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

Итак, я открыл свой файл nib, и я вижу, что нет установленных репозиторий. Тем не менее, я пытаюсь щелкнуть и перетащить круг для "новой ссылки для ссылок" на File Owner, но это не позволит мне... что мне нужно сделать, чтобы отобразить мое представление?

Ответ 1

Идентификатор View Identity - Class Identity не был установлен. После установки его в соответствующий класс проблема была решена.

Ответ 2

Вы, ребята, правы, но, поскольку я новичок, мне потребовалось немного времени, чтобы выяснить все шаги, чтобы сделать это. Вот что у меня сработало:

  • Откройте файл XIB, вызывающий проблемы
  • Нажмите на значок владельца файла на левой панели (верхняя часть выглядит как окно с желтым контуром)
  • Если вы не видите правую боковую панель, нажмите на третий значок над "видом" на панели инструментов. Это покажет правую боковую панель
  • В правой боковой панели нажмите на третью вкладку - ту, которая немного похожа на газету
  • В "Custom Class" вверху убедитесь, что Class - это имя ViewController, которое должно соответствовать этому представлению. Если нет, введите его
  • В правой боковой панели нажмите на последнюю вкладку - ту, которая выглядит как круг со стрелкой на ней
  • Вы должны увидеть "розетки" с "видом" под ним. Перетащите кружок рядом с ним на значок "вид" на левой панели (нижний, похожий на белый квадрат с толстым серым контуром
  • Сохранить XIB и перезапустить

Ответ 3

Это предложение Josh Justice, но графическим способом (картинки мои):

  • Выберите владельца файла
  • На правой панели выберите пользовательский класс.
  • Введите имя пользовательского класса

enter image description here

  1. На правой панели выберите oultets
  2. Перетащите окно просмотра для просмотра компонента

enter image description here

Наконец, контроллер просмотра создается с помощью скользящего кода:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

Ответ 4

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

Ответ 5

Вы уверены, что у вас есть UIView (или подкласс), присвоенный свойству view for yourViewController?

Щелкните правой кнопкой мыши на "Владелец файла" в левой панели xib для yourViewController и убедитесь, что установлена ​​ "View". Если нет, установите его в представление!

это определенно исправит проблему

Ответ 6

У меня была такая же проблема с XCode 4.6.3. Я начал с пару файлов с именем MySettingsView.h и .m, но удалил их в пользу MySettingsViewController.h, но, несмотря на большинство упомянутых здесь подсказок, он по-прежнему сохранял ошибку с помощью

2013-07-05 11: 48: 17.205 MyApp [39024: c07] *** Завершение приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: '- [UIViewController _loadViewFromNibNamed: bundle:] загрузил "MySettingsView", но не была установлена ​​точка просмотра.

Очевидно, он все еще "смутился", пытаясь загрузить MySettingsView.xib вместо MySettingsView Controller.xib. Может быть, его логика "делать то, что я имею в виду" слишком причудлива.

Итак, я работал над проблемой путем жесткого кодирования имени NIB/XIB в MySettingsViewController.m:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}

Ответ 7

Для меня все, что указано здесь fooobar.com/questions/13120/..., было истинным, но все-таки это была ошибка, причина в том, что я создал класс вида с именем ABCView, а затем удалил его позже я добавил контроллер представления как ABCViewController, так что так или иначе он ссылался на старый ABCView в новом контроллере представления, мне пришлось удалить ABCViewController и добавить новый с другим именем, которое решило мою проблему.

Спасибо

Ответ 8

Любой, кто использует метод xib для создания UIView и сталкивается с этой проблемой, заметит, что у вас не будет выхода "view" в меню инспектора соединений. Но если вы установите для пользовательского класса "Владельцы файлов" значение UIViewController, а затем вы увидите выход "view", который вы можете просто использовать CMND для подключения выхода к CustomView.

Ответ 9

Моя проблема с этим была вызвана наличием дубликата nib в папке класса, у которой не было набора представлений. Кажется, что xcode выбрал один наконечник для сборки, а затем другой в следующий раз, когда я построил проект. Просто удалил другой. Выглядит неплохо. Doh!

Ответ 10

Просто потратил более часа, пытаясь выяснить, почему мое свойство представления не установлено в моем контроллере просмотра после его запуска из nib. Не забудьте вызвать "[super initWithNibName...]" внутри вашего контроллера представления initWithNibName.

Ответ 11

Я только что исправил это в своем. Большой проект, два файла. Один из них был "ReallyLargeNameView", а другой был "ReallyLargeNameViewController"

Основываясь на втором ответе, выбранном выше, я решил, что должен очистить свою сборку. Нада, но я все еще подозревал XCode (поскольку у меня есть два одинаковых класса, нужно их абстрагировать, но...) Так что один работает, а другой нет. Имена владельцев файлов до сих пор копируются и вставляются, выходы перезагружены, xCode перезагружен, все еще ничего.

Итак, я удаляю аналогичный класс named (который является представлением). Вскоре новая ошибка "розетка внутри не подключена" буквально была "webView not key value" blah... в основном говоря "Visual Studio лучше". В любом случае... Я удаляю файл с меньшим именем и бам, он работает.

XCode путают файлы с похожими именами. И проект достаточно велик, чтобы немного перезагрузиться, что может быть его частью.

Пожелаю, чтобы у меня был более технический ответ, чем "XCode запутан", но хорошо, xCode сильно запутался на этом этапе. Сконцентрировав это так же, я помогу маленькому ребенку. Он работает сейчас,:) Если вы пользуетесь другими, если выше ничего не исправить.

Не забудьте очистить свои сборки (также удалив симулятор)

Ответ 12

У меня также была та же проблема, и моя проблема заключалась в том, что я добавил другую локализацию (английский) в ViewControllers nib, поэтому мое приложение с локализацией German не могло найти нить с локализационным английским языком!! Надеюсь, это поможет любому!

Ответ 13

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

Ответ 14

Предыдущие ответы почти решили проблему для меня, но последний шаг отсутствовал.

  1. Создайте файл xib и swift с тем же именем.

Add View and Swift File

  1. Установите владельца файла в качестве подкласса UIView.

enter image description here

  1. Перетащите выход из представления в подкласс UIView, назовите его "contentView"

add the contentview

  1. Добавьте этот пользовательский инициализатор, чтобы при загрузке XIB он прикреплял contentView

add the contentview as a subview

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

Теперь любые добавленные вами @IBOutlets будут прикреплены.

Ура, Ричард

Ответ 15

Для меня проблема вызвана вызовом initWithNibName:bundle:. Я использую ячейки табличного представления из файла nib для определения форм ввода, которые находятся на tableViews. Поскольку у меня нет взгляда, нет смысла подключаться к одному. Вместо этого, если я вместо этого назову метод initWithStyle: и изнутри, загрузим файл nib, тогда все будет работать как ожидалось.

Ответ 16

У меня была та же проблема, но было предложено немного другое решение. Проблема в этом случае была классом File Owner, а не классом View. Чтобы установить это, мне пришлось щелкнуть значок "назад назад" в левом нижнем углу окна "Конструктор интерфейсов", а затем появились опции, которые изолировали характеристики Файлового Владельца, Первого Ответчика и Вид. Щелчок по первому (большой прозрачный блок) позволил мне затем установить свой собственный класс, как было предложено выше.

Ответ 17

У меня была такая же проблема, но было предложено другое решение. Проблема в этом случае заключалась в том, что класс File Owner не был связан с xib файлом.

Ответ 18

Сегодня я столкнулся с чем-то очень похожим, с подклассом Swift UIViewController. В этом случае ни одна из вышеперечисленных исправлений не работала, но немного изменился мой код. Net-net, имеющий расширение для подкласса, происходит до того, как определение подкласса в том же файле, похоже, запутает XCode, несмотря на компиляцию штрафа; исправление заключалось в том, чтобы поместить расширения после определения подкласса.

Я отправил детали в ответ на этот похожий вопрос.

Ответ 19

В моем случае назначенный инициализатор - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil в *** классе ViewController был реализован так, даже если при вызове другого инициализатора для инициализации объекта будет вызван назначенный инициализатор.

Итак, чтобы решить эту проблему, проверяя, что - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil также является правильным способом.

Ответ 20

У меня была такая же ошибка в моем проекте, но по другой причине. В моем случае у меня была установка IBOutlet с именем "Вид" в моем пользовательском классе UITableViewController. Я знал, что "мнение" было особенным, потому что это член базового класса, но я не думал, что View (другой случай) также будет проблемой. Я предполагаю, что некоторые области Cocoa не чувствительны к регистру, и, возможно, загрузка xib является одной из этих областей. Поэтому я просто переименовал его в DefaultView, и теперь все хорошо.

Ответ 21

выберите владельца файла и перейдите в окно проверки идентификатора, укажите имя класса, которому оно соответствует. Если ни один из вышеперечисленных методов не работает, и вы все же не можете видеть выходную розетку, затем дайте новое подключение для подключения к файловому владельцу, то вы сможете увидеть выходную точку. Нажмите на представление Outlet, чтобы установить соединение между View Outlet и владельцем файла. Запустите приложение, это отлично работает.

Ответ 22

В моем случае представление не было просмотрено в xib.  в xib Вид был size = none (правая рука четвертой вкладки). Я установил размер Freeform и перезагрузил xCode. просмотр был обжалован, и я установил правильную ссылку на View.

Ответ 23

Если вы все пробовали, и вы все равно получите эту ошибку, попробуйте повторно создать файл класса с нуля, но не забудьте установить флажок "Также создать XIB файл". Это автоматически свяжет несколько элементов, которые не связаны при создании этих файлов по отдельности. После этого вы можете, вероятно, вырезать и вставить все на новый XIB, и он должен работать нормально.

Я нахожу эту проблему специально для создания файлов отдельно в Swift.

Ответ 24

для меня это произошло, когда

  • У меня есть класс ViewController (.mm/h), связанный с файлом Nib,
  • UIView из этого ViewController должен быть загружен на другое представление в качестве подвью,

  • мы будем называть что-то вроде этого

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }
    

Где

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

Здесь loadView отсутствовал,, добавив, что эта линия разрешила мою проблему.

Ответ 25

У меня была та же проблема, я понял, и это из-за того, что я отметил " Статические ячейки" в свойствах Просмотр таблицы в разделе Контент. Работал, когда он изменился на "Dynamic Prototypes". Снимок экрана ниже.  введите описание изображения здесь

Ответ 26

У меня была похожая проблема с Xcode 9.3, и установка "Модуль" в инспекторе атрибутов "Владелец файла" для модуля проекта устранила это для меня.

Ответ 27

Откройте файл раскадровка, где ваш ViewController существует, или связанные с ним файл XIB с textEdit.app и проверьте, раскадровка или имя XIB такой же вашу ViewController, а затем изменить его, сохранить и перезагрузить/перезапустить Xcode.

Ответ 28

Я бы хотел второй Стивен Дж. Несколько раз X Code просто путается. У меня просто был опыт, когда я много играл с пользовательским интерфейсом, и несколько раз добавлял и удалял выходы. Розетки просто больше не подключались. Я никогда не выяснял конкретной причины (я пробовал все вышеперечисленные решения), и мне просто нужно было удалить NIB и воссоздать его с нуля, и на самом деле ему пришлось использовать другое имя для NIB до того, как оно сработает. (XCode 4.6.1) Потрачено на пару часов.

Ответ 29

Если у вас есть код Swift, который ссылается на другое пространство имен с помощью @objc, обязательно используйте имя класса Objective-C:

@objc(NamespacedSomeViewController)
class SomeViewController: UIViewController {
....

В этом случае вам нужно использовать NamespacedSomeViewController в IB.

Ответ 30

Если вы используете собственный метод init, убедитесь, что вы возвращаете что-то действительное. Я столкнулся с фрагментом кода, который упал на что-то вроде этого:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

В другом классе контроллер был создан так:

CustomController *controller = [[CustomController alloc] init];

Проблема в том, что в методе init self не изменилось и должно выглядеть следующим образом:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}