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

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

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

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

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

27 ответов

Решение

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

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

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

Пользовательская конфигурация класса

  • В правой боковой панели нажмите на последнюю вкладку - ту, которая выглядит как круг со стрелкой в ​​нем
  • Вы должны увидеть "розетки" с "видом" под ним. Перетащите кружок рядом с ним на значок "вид" на левой панели (нижний, похожий на белый квадрат с толстым серым контуром

Пользовательская конфигурация класса

  • Сохранить XIB и перезапустить

Это предложение Джоша Джастиса, но в графической форме (фотографии мои):

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

введите описание изображения здесь

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

введите описание изображения здесь

Наконец, View Controller создается с использованием скользящего кода:

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

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

Вы уверены, что у вас есть UIView (или подкласс), назначенный свойству "view" вашего ViewViewController?

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

это определенно решит проблему

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

Если бы я просто создал новый файл xib, добавил к нему UIViewController в Interface Builder и установил этот пользовательский класс UIViewController для моего контроллера представления, это привело бы к сбою "выход просмотра не был установлен". В других решениях здесь говорится, что нужно перетащить окно просмотра в представление с контролем, но для меня выход просмотра был выделен серым цветом, и я не мог его перетащить.

Я понял, что моя ошибка заключалась в добавлении UIViewController в Interface Builder. Вместо этого мне пришлось добавить UIView и установить пользовательский класс владельца файла для моего контроллера представления. Затем я мог перетащить окно просмотра владельца файла в мое новое представление UIView, и все заработало, как должно.

У меня была такая же проблема с 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];
}

Для меня все вещи, изложенные здесь /questions/6586046/zagruzhennyij-nakonechnik-no-vyihod-view-ne-ustanovlen/6586092#6586092 были правдой, но все равно это была ошибка, причина была в том, что я создал класс View с именем ABCView, а затем удалил его и добавил контроллер представления как ABCViewController, так что как-то он ссылался на старый ABCView в новом контроллере представления, мне пришлось удалить ABCViewController и добавить новый с другим именем, что решило мою проблему.

Спасибо

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

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

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

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

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

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

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

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

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 будут прикреплены.

Ура, Ричард

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

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

Поэтому я удаляю похожий именованный класс (который является представлением). Вскоре новая ошибка "розетка внутри не подключена" буквально была "webView, а не значение ключа", бла… в основном, говоря "Visual Studio лучше". Во всяком случае... Я стираю меньший именованный файл, и БАМ, это работает.

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

Хотелось бы, чтобы у меня был более технический ответ, чем "XCode в замешательстве", но хорошо, xCode сильно запутался на этом этапе. Не путать это так же, как я помогу маленькому ребенку. Это работает сейчас,:) Должно принести пользу другим, если вышесказанное ничего не исправит.

Всегда не забывайте чистить свои сборки (удаляя симулятор тоже)

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

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

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

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

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

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

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

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

Моя проблема заключалась в неправильных классах. Я использовал собственный.xib для своего пользовательского представления. Правильно это должно быть установлено как здесь:

  1. У представления не должно быть класса
  2. Класс, который используется с .xib установлен в File's Owner вкладка
  3. Розетки подключены к File's Owner а не к View.

    h ttps:https://stackru.com/images/d80266852197ab7b06928626cdd5de0c908b484d.png

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

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

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

Для меня это случилось, когда

  • У меня есть класс 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 отсутствовал,, добавление этой строки решило мою проблему.

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

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

У меня была та же проблема, я понял, и это потому, что я пометил "Статические ячейки" в свойствах табличного представления под опцией контента. Сработало когда поменял на "Dynamic PrototypesMsgstr "Скриншот ниже.

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

У меня была похожая проблема с Xcode 9.3, и установка "Module" в инспекторе атрибутов "File Owner's" для модуля проекта исправила это для меня.

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

Если вы используете собственный метод 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;
}
Другие вопросы по тегам