it-swarm.com.ru

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

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

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

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

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

672
John

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

59
John

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

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

Custom class configuration

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

Custom class configuration

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

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

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

enter image description here

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

enter image description here

Наконец, 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];
151
Javier Calatrava Llavería

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

66
Rohit Mandiwal

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

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

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

26
Shehbaz Khan

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

Для меня все вещи, изложенные здесь https://stackoverflow.com/a/6395750/939501 были правдой, но все-таки это была ошибка, причина была в том, что я создал класс View с именем ABCView, а затем удалил его, позже добавил контроллер представления как ABCViewController, так что каким-то образом он ссылался на старый ABCView в новом контроллере представления, мне пришлось удалить ABCViewController и добавить новый с другим именем, что решило мою проблему.

Спасибо

13
vishal dharankar

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

6
Matt

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

5
user2965721

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

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

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

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

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

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

4
Stephen J

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

4
Kamil.S

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

3
Weini

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

3
Nidhin

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

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

1
lynulzy

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

1
DaveDude

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

1
user1951454

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

1
Michael Stern

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

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

1
Justin Middleton

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

0
nananta

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

0
OrdoDei

У меня была та же проблема, я понял, и это потому, что я пометил "Статические ячейки" в свойствах Table View в Content option. Сработало, когда оно изменилось на "Dynamic Prototypes". Снимок экрана ниже .  enter image description here

0
Saranjith

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

0
eselk

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

0
Abhilash Reddy kallepu

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

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

0
Amitg2k12

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

0
BrianH

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

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

Ура, Ричард

0
COSMO BAKER

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

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

0
Travis M.