Ответ 1
Идентификатор View Identity - Class Identity не был установлен. После установки его в соответствующий класс проблема была решена.
Я добавил новый файл nib в свой проект и попытался загрузить его.
Однако, когда я нажимаю на значок панели инструментов, который должен взять меня в созданное мной представление, я получаю сообщение NSInternalInconsistencyException
с сообщением:
Завершение приложения из-за неперехваченного исключения 'NSInternalInconsistencyException', причина: '- [UIViewController _loadViewFromNibNamed: bundle:] загрузил значок "...", но выходная точка просмотра не была установлена. '
Итак, я открыл свой файл nib, и я вижу, что нет установленных репозиторий. Тем не менее, я пытаюсь щелкнуть и перетащить круг для "новой ссылки для ссылок" на File Owner, но это не позволит мне... что мне нужно сделать, чтобы отобразить мое представление?
Идентификатор View Identity - Class Identity не был установлен. После установки его в соответствующий класс проблема была решена.
Вы, ребята, правы, но, поскольку я новичок, мне потребовалось немного времени, чтобы выяснить все шаги, чтобы сделать это. Вот что у меня сработало:
Это предложение Josh Justice, но графическим способом (картинки мои):
Наконец, контроллер просмотра создается с помощью скользящего кода:
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];
Я могу его исправить, переделав соединение между файловым владельцем и представлением. Управляйте перетаскиванием от владельца файла к вашему представлению (в IB) и выберите вид из всплывающего меню.
Вы уверены, что у вас есть UIView (или подкласс), присвоенный свойству view for yourViewController?
Щелкните правой кнопкой мыши на "Владелец файла" в левой панели xib для yourViewController и убедитесь, что установлена "View". Если нет, установите его в представление!
это определенно исправит проблему
У меня была такая же проблема с 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];
}
Для меня все, что указано здесь fooobar.com/questions/13120/..., было истинным, но все-таки это была ошибка, причина в том, что я создал класс вида с именем ABCView, а затем удалил его позже я добавил контроллер представления как ABCViewController, так что так или иначе он ссылался на старый ABCView в новом контроллере представления, мне пришлось удалить ABCViewController и добавить новый с другим именем, которое решило мою проблему.
Спасибо
Любой, кто использует метод xib для создания UIView и сталкивается с этой проблемой, заметит, что у вас не будет выхода "view" в меню инспектора соединений. Но если вы установите для пользовательского класса "Владельцы файлов" значение UIViewController, а затем вы увидите выход "view", который вы можете просто использовать CMND для подключения выхода к CustomView.
Моя проблема с этим была вызвана наличием дубликата nib в папке класса, у которой не было набора представлений. Кажется, что xcode выбрал один наконечник для сборки, а затем другой в следующий раз, когда я построил проект. Просто удалил другой. Выглядит неплохо. Doh!
Просто потратил более часа, пытаясь выяснить, почему мое свойство представления не установлено в моем контроллере просмотра после его запуска из nib. Не забудьте вызвать "[super initWithNibName...]" внутри вашего контроллера представления initWithNibName.
Я только что исправил это в своем. Большой проект, два файла. Один из них был "ReallyLargeNameView", а другой был "ReallyLargeNameViewController"
Основываясь на втором ответе, выбранном выше, я решил, что должен очистить свою сборку. Нада, но я все еще подозревал XCode (поскольку у меня есть два одинаковых класса, нужно их абстрагировать, но...) Так что один работает, а другой нет. Имена владельцев файлов до сих пор копируются и вставляются, выходы перезагружены, xCode перезагружен, все еще ничего.
Итак, я удаляю аналогичный класс named (который является представлением). Вскоре новая ошибка "розетка внутри не подключена" буквально была "webView not key value" blah... в основном говоря "Visual Studio лучше". В любом случае... Я удаляю файл с меньшим именем и бам, он работает.
XCode путают файлы с похожими именами. И проект достаточно велик, чтобы немного перезагрузиться, что может быть его частью.
Пожелаю, чтобы у меня был более технический ответ, чем "XCode запутан", но хорошо, xCode сильно запутался на этом этапе. Сконцентрировав это так же, я помогу маленькому ребенку. Он работает сейчас,:) Если вы пользуетесь другими, если выше ничего не исправить.
Не забудьте очистить свои сборки (также удалив симулятор)
У меня также была та же проблема, и моя проблема заключалась в том, что я добавил другую локализацию (английский) в ViewControllers nib, поэтому мое приложение с локализацией German не могло найти нить с локализационным английским языком!! Надеюсь, это поможет любому!
Я столкнулся с той же проблемой, когда случайно удалил ссылку на xib и добавил ее снова. Я просто исправил, установив соединение между владельцем файлов и представлением. Также убедитесь, что ваш пользовательский класс FilesOwner является вашим ожидаемым viewController.
Предыдущие ответы почти решили проблему для меня, но последний шаг отсутствовал.
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 будут прикреплены.
Ура, Ричард
Для меня проблема вызвана вызовом initWithNibName:bundle:
. Я использую ячейки табличного представления из файла nib для определения форм ввода, которые находятся на tableViews
. Поскольку у меня нет взгляда, нет смысла подключаться к одному. Вместо этого, если я вместо этого назову метод initWithStyle:
и изнутри, загрузим файл nib, тогда все будет работать как ожидалось.
У меня была та же проблема, но было предложено немного другое решение. Проблема в этом случае была классом File Owner, а не классом View. Чтобы установить это, мне пришлось щелкнуть значок "назад назад" в левом нижнем углу окна "Конструктор интерфейсов", а затем появились опции, которые изолировали характеристики Файлового Владельца, Первого Ответчика и Вид. Щелчок по первому (большой прозрачный блок) позволил мне затем установить свой собственный класс, как было предложено выше.
У меня была такая же проблема, но было предложено другое решение. Проблема в этом случае заключалась в том, что класс File Owner не был связан с xib файлом.
Сегодня я столкнулся с чем-то очень похожим, с подклассом Swift UIViewController. В этом случае ни одна из вышеперечисленных исправлений не работала, но немного изменился мой код. Net-net, имеющий расширение для подкласса, происходит до того, как определение подкласса в том же файле, похоже, запутает XCode, несмотря на компиляцию штрафа; исправление заключалось в том, чтобы поместить расширения после определения подкласса.
Я отправил детали в ответ на этот похожий вопрос.
В моем случае назначенный инициализатор - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
в *** классе ViewController был реализован так, даже если при вызове другого инициализатора для инициализации объекта будет вызван назначенный инициализатор.
Итак, чтобы решить эту проблему, проверяя, что - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
также является правильным способом.
У меня была такая же ошибка в моем проекте, но по другой причине. В моем случае у меня была установка IBOutlet с именем "Вид" в моем пользовательском классе UITableViewController. Я знал, что "мнение" было особенным, потому что это член базового класса, но я не думал, что View (другой случай) также будет проблемой. Я предполагаю, что некоторые области Cocoa не чувствительны к регистру, и, возможно, загрузка xib является одной из этих областей. Поэтому я просто переименовал его в DefaultView, и теперь все хорошо.
выберите владельца файла и перейдите в окно проверки идентификатора, укажите имя класса, которому оно соответствует. Если ни один из вышеперечисленных методов не работает, и вы все же не можете видеть выходную розетку, затем дайте новое подключение для подключения к файловому владельцу, то вы сможете увидеть выходную точку. Нажмите на представление Outlet, чтобы установить соединение между View Outlet и владельцем файла. Запустите приложение, это отлично работает.
В моем случае представление не было просмотрено в xib. в xib Вид был size = none (правая рука четвертой вкладки). Я установил размер Freeform и перезагрузил xCode. просмотр был обжалован, и я установил правильную ссылку на View.
Если вы все пробовали, и вы все равно получите эту ошибку, попробуйте повторно создать файл класса с нуля, но не забудьте установить флажок "Также создать XIB файл". Это автоматически свяжет несколько элементов, которые не связаны при создании этих файлов по отдельности. После этого вы можете, вероятно, вырезать и вставить все на новый XIB, и он должен работать нормально.
Я нахожу эту проблему специально для создания файлов отдельно в Swift.
для меня это произошло, когда
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 отсутствовал,, добавив, что эта линия разрешила мою проблему.
У меня была та же проблема, я понял, и это из-за того, что я отметил " Статические ячейки" в свойствах Просмотр таблицы в разделе Контент. Работал, когда он изменился на "Dynamic Prototypes
". Снимок экрана ниже.
У меня была похожая проблема с Xcode 9.3, и установка "Модуль" в инспекторе атрибутов "Владелец файла" для модуля проекта устранила это для меня.
Откройте файл раскадровка, где ваш ViewController существует, или связанные с ним файл XIB с textEdit.app и проверьте, раскадровка или имя XIB такой же вашу ViewController, а затем изменить его, сохранить и перезагрузить/перезапустить Xcode.
Я бы хотел второй Стивен Дж. Несколько раз X Code просто путается. У меня просто был опыт, когда я много играл с пользовательским интерфейсом, и несколько раз добавлял и удалял выходы. Розетки просто больше не подключались. Я никогда не выяснял конкретной причины (я пробовал все вышеперечисленные решения), и мне просто нужно было удалить NIB и воссоздать его с нуля, и на самом деле ему пришлось использовать другое имя для NIB до того, как оно сработает. (XCode 4.6.1) Потрачено на пару часов.
Если у вас есть код Swift, который ссылается на другое пространство имен с помощью @objc
, обязательно используйте имя класса Objective-C:
@objc(NamespacedSomeViewController)
class SomeViewController: UIViewController {
....
В этом случае вам нужно использовать NamespacedSomeViewController
в IB.
Если вы используете собственный метод 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;
}