setValue: forUndefinedKey: этот class не является ключевым значением, совместимым с кодировкой для ключа

Я создаю логин для просмотра билетов на поддержку. Первое представление – это представление билета, и если вы не вошли в систему, вы подталкиваете вас к экрану входа в систему. Однако я получаю следующее:

Поддержка [3209: 18e03] * Завершение приложения из-за неотображенного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот class не является ключевым значением, совместимым с кодировкой для ключа LoginScreen». *

Первый стек бросить вызов: (0x1f17012 0x1634e7e 0x1f9ffb1 0x10e1711 0x1062ec8 0x10629b7 0x108d428 0x7990cc 0x1648663 0x1f1245a 0x797bcf 0x65ce37 0x65d418 0x65d648 0x65d882 0x669235 0x8683d2 0x6664f3 0x666777 0x6667b7 0x9d1fe2 0x9c3ad9 0x65e422 0x2b15 0x65f753 0x65fb2f 0x661286 0x65fe3f 0x592910 0x592895 0x5926e5 0x1edfafe 0x1edfa3d 0x1ebd7c2 0x1ebcf44 0x1ebce1b 0x22aa7e3 0x22aa668 0x57c65c 0x1f0d 0x1e35) Libc + + abi.dylib: terminate называется throwing exception

Вот мой код для LoginScreen.m

#import "UIAlertView+error.h" #import "LoginScreen.h" #import "API.h" #include  #define sayWhat @"REMOVEDFORSECURITY" @implementation LoginScreen -(void)viewDidLoad { NSLog(@"Found me!"); [super viewDidLoad]; //focus on the username field /show keyboard [fldUsername becomeFirstResponder]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } -(IBA ction)btnLoginRegisterTapped:(UIButton*)sender { if (fldUsername.text.length < 4 || fldPassword.text.length  0) { //success } else { //error' [UIAlertView error:[json objectForKey:@"error"]]; } }]; } @end 

и LoginScreen.h

 #import  @interface LoginScreen : UIViewController { //the login form fields IBOutlet UITextField* fldUsername; IBOutlet UITextField* fldPassword; } //action for when either button is pressed -(IBAction)btnLoginRegisterTapped:(id)sender; @end                                                                                                                           

Такие необъяснимые исключения часто являются результатом нечистого файла xib . Откройте xib в xcode, выберите «Владелец файла» и нажмите «Инспектор подключения» (стрелка вправо справа), чтобы сразу увидеть все розетки. Ищите ! s, что указывает на отсутствие выхода.

Проверьте свои подключения в Interface Builder. Вы, вероятно, ссылаетесь на несуществующий IBOutlet или IBAction .

Посмотрите

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

У меня была аналогичная проблема с созданием пользовательского TableCell. Проблема заключалась в том, что я установил FileOwner в свой собственный class, а затем подключил выходы.

FileOwner должен оставаться NSObject.

Перейдите на вкладку «Контрольные точки Xcode». Используйте кнопку внизу, чтобы добавить контрольную точку исключения. Теперь вы увидите, какой код вызывает setValue: forKey: и связанный стек. Если повезет, это укажет вам прямо на источник проблемы.

Странно, что ваш class – LoginScreen, но ошибка говорит, что кто-то использует «LoginScreen» в качестве ключа. Убедитесь, что LoginScreen.m является частью вашей цели.

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


Сноска: с Swift возникает общая проблема, если вы меняете имя classа (так что вы переименовываете его везде в своем коде). Раскадровка борется с этим, и вам обычно приходится перетаскивать любые соединения с этим classом. И, в частности, повторно введите имя classа, где угодно, на вкладке IdentityInspector справа. (В примере с рисунком я намеренно ошибочно набрал имя classа. Но то же самое происходит и при переименовании classа, хотя это, по-видимому, правильно в IdentityInspector , вам нужно снова ввести имя, оно будет правильно автозаполнено, и вы хорошо идти.)

У меня было это, и я просмотрел все и не видел никаких проблем, но в конце концов вспомнил, чтобы попытаться очистить и очистить Derived Data, и это решило!

У меня была аналогичная проблема, но я использовал initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil явно используя имя classа в качестве переданной строки (да, плохая форма!).

Я закончил удаление и повторное создание controllerа вида с использованием немного другого имени, но пренебрег тем, что он изменил строку, указанную в методе, поэтому моя прежняя версия все еще использовалась – даже если она была в мусорном ведре!

Я, скорее всего, буду использовать эту структуру, как было предложено в: Проходит ли два параметра nil в initWithNibName: метод bundle: метод плохой (т.е. небезопасный или медленный)?

 - (id)init { [super initWithNibName:@"MyNib" bundle:nil]; ... typical initialization ... return self; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { return [self init]; } 

Надеюсь, это поможет кому-то!

Эта ошибка – это что-то еще!

Вот как я исправил это. Я использую xcode Version 6.1.1 и использую swift. Я получал эту ошибку каждый раз, когда мое приложение пыталось выполнить segue, чтобы перейти к следующему экрану. Вот что я сделал.

  1. Убедитесь, что кнопка была подключена к правильному действию. (Это не проблема, но все же хорошо проверить)
  2. Убедитесь, что кнопка не имеет никаких дополнительных действий или выходов, которые вы, возможно, создали по ошибке. (Это не проблема, но все же хорошо проверить)
  3. Проверьте журналы и убедитесь, что все кнопки в NEXT SCREEN имеют правильные действия, и если есть какие-либо изменения, убедитесь, что они имеют уникальный идентификатор. (Это была проблема)
    • В одном из сегментов не было уникального идентификатора
    • Одна из кнопок имела действие и два выхода, которые я создал по ошибке.

Удалите все дополнительные точки и убедитесь, что вы переходите к следующему экрану с уникальными идентификаторами.

Ура,

У меня была эта проблема, потому что я не использовал StoryBorad, а в свойствах проекта -> Deploy info -> Main interface был именем Main Xib.

Я удалил значение в Main Interface и решил проблему.

Я столкнулся с подобной ошибкой при создании пользовательского classа вида, потому что каким-то образом один из них дважды подключался к файлу XIB (я думаю, что изначально я управлял drag and dropм элемента управления непосредственно в код, но последний элемент управления снова перетаскивался из Владелец файла). Я открыл файл XIB и удалил один из них, после чего все работало нормально. Надеюсь, это поможет.

Я получил это на PickerView всех мест. Сообщение об ошибке указывало на проблему с «queuePicker» в первом сообщении. Это было вызвано предыдущей ссылкой, которая не была долговечной после добавления компонента и переименовала исходный NSArray в нечто иное, чем queuePicker. CNTL + щелчок на объекте StoryBoard дает вам соединения. Я щелкнул «x» рядом с ViewController для queuePicker в реферирующих выходах, сделал новое соединение и альт, больше никаких сбоев.

Вероятно, вы установите значение для ключа в alertView, которое не разрешено. Ключ в этом случае – LoginScreen . Я не вижу никакого вызова setValue() , поэтому я предполагаю, что это где-то еще в коде.

Сегодня я столкнулся с этой проблемой. Как было предложено в этом ответе , проблема была нечистым xib. В моем случае нечистый xib был результатом обновления xib, загружаемого чем-то другим, кроме controllerа вида, с которым он был связан.

Xcode позволяет мне создавать и заполнять новую розетку и связывать ее с владельцем файла, хотя я явно подключил его к источнику правильного controllerа. Вот код, созданный Xcode:

       

Когда я запускал свое приложение, он разбился с той же ошибкой, not key value coding-compliant . Чтобы устранить эту проблему, я удалил выход из владельца файла в построителе интерфейса и напрямую связал его с объектом controllerа вида на левом контуре вместо кода в помощнике редактора.

Это случилось со мной в следующем сценарии:

Я создал второй проект в своей рабочей области, выбрал «Single View Application» для шаблона.

Затем я пошел в интерфейс Builder (основной раскадровки iPhone), добавил UISwitch к основному виду и подключил его к controllerу вида через IBOutlet и IBAction ( -valueChanged: .

При запуске приложение вылетает с исключением, упомянутым в вопросе. Если я удалю переключатель из представления, он будет работать.

После тщательной проверки я понял, что я управляю – перетаскивал соединения в ViewController.h другого проекта в том же рабочем пространстве. «Автоматический» набор помощника редактора интерфейса Builder (так называемый значок сундука Tuxedo ) выбрал в качестве «аналога» неправильный файл (с правильным именем).

Надеюсь, что это поможет кому-то, особенно потому, что оба шаблона проекта «Single View Application» и «SpriteKit Game» (в моем случае) создают class controllerа представления по умолчанию под названием «ViewController».

Если у вас разные файлы storybord, и если у вас есть ссылки на выход с созданием точек в ваших файлах заголовков, вы просто удаляете соединения, щелкнув правой кнопкой мыши на владельце файлов.

Владелец файлов-> Щелкните правой кнопкой мыши-> удалите ненужное соединение.

Пройдите это для ясного объяснения. Что это значит? «NSUnknownKeyException», причина: … этот class не является ключевым значением, совместимым с кодировкой для ключа X ”

Обычно это означает, что что-то пытается получить доступ к @property «givenName» .

Если вы делали что-то с Interface Builder(IB) , обычной причиной является то, что вы либо:

  1. удалил это свойство из classа, но еще не удалил подключения в IB
  2. ИЛИ: у вас есть объект владельца файла, настроенный на неправильный class (проверьте свойства – разные, в зависимости от того, какую версию xcode вы используете
    • чтобы найти имя classа, его набор как. Вероятно, вы скопировали / вклеили файл NIB и не изменили это поле в NIB), и вы подключили выход для этого classа, но ваш фактический владелец файла – это что-то другое

В моем случае у меня есть описание IBOutlet UILabel * .h, это было с желтым /! \ – «не синтезируется» , как я помню. Не знаю, что это такое и почему только этот ярлык.

Но я получил эту ошибку и ошибку, как и выше. Удалено * описание и воссоздание * description2. Никакого сбоя в результате.

Для меня я переключил вызов для моего заголовка представления коллекции, где я регистрировал nib для регистрации classа. Это исправило это.

Ибо потому, что не имеет 2 функции

 @implementation CellTableView - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { return [self init]; } - (void)awakeFromNib { } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; } @end 

Мне пришлось удалить все объекты и повторно добавить их. Это, похоже, устранило проблему.

Давайте будем гением компьютера.