2012-03-30 3 views
18
FinalViewWithSending *newView = [[FinalViewWithSending alloc]initWithNibName:@"FinalViewWithSending" bundle:nil]; 
newView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:newView animated:YES]; //it crashes here with a thread 1 error, SIGABRT error.. 

Он говорит:SetValue: forUndefinedKey]:

"Terminating app due to uncaught exception 'NSUnknownKeyException', 
reason: '[<FinalViewWithSending 0x1bef70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key loginButton.'" 

Там нет переменной называется loginButton так Im не знаю, почему я получаю сообщение об ошибке ...

Спасибо

+0

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

ответ

31

Вы получаете ошибку , потому что нет свойства под названием loginButton. Проверьте файл .xib. Существует почти наверняка плохая ссылка на объект FinalViewWithSending (вероятно, владелец файла), который указывает loginButton, даже если он не существует в коде класса.

+0

Нет плохой ссылки. Я проверил. Должен ли я просто создать переменную loginButton? – Szwedo

+1

Я не знаю ... если бы это был я, я бы скорее нашел фактическую ошибку. Что делать, если вы щелкните правой кнопкой мыши FinalViewWithSending.xib, откройте его как исходный код и выполните поиск символа в виде текста? Иногда вещи становятся странными в xib способами, которые не отображаются в качестве элементов пользовательского интерфейса в Xcode. –

+0

Как открыть его в качестве исходного кода? Я просто пошел в исходный контроль и внес изменения ... Я тоже не мог найти его. – Szwedo

8

Филлип Миллс верен.

Ответ на этот вопрос для любого, кто ищет, - это отредактировать раскадровку и удалить любую ссылку на указанный неопределенный ключ. Вы должны отредактировать файл раскадровки во внешнем редакторе: щелкните правой кнопкой мыши на списке раскадровки в иерархии, а затем нажмите «показать в поиске» или что у вас есть. Откройте в текстовом редакторе, удалите указанные ссылки, выполнив поиск, сохранение и возврат в Xcode. Больше не проблема.

Это происходит, когда вы неправильно удаляете что-либо из контроллера.

+0

Это случилось со мной, когда я остался UIImageView. –

+1

Для новичков здесь нет необходимости открывать текстовый редактор и редактировать раскадровку. View-> Utilities-> Show Connections Inspector нажмите на различные кнопки, чтобы увидеть плохое соединение. –

2

Если у вас есть какие-либо локализации, найдите плохие ссылки во всех раскадровках (раскройте раскадровку, чтобы найти локализованные раскадровки).

Это была моя ситуация. Я искал плохие ссылки в одной раскадровке, и они были в локализованной.

7

Согласие здесь - Филлип Миллс верен.

Кто-то упомянул об открытии раскадровки в текстовом редакторе - это не обязательно.

Просто нажмите на раскадровку, перейдите к Инспектору соединений. Если у вас есть проблемный выход, вы увидите восклицательный знак рядом с розеткой. Удали это.

+0

Устранение проблемной розетки решило мою проблему. Вот что я делаю. Щелкните ViewController, который выдает эту ошибку. Перейдите в «Инспектор подключений **», перейдя в меню «View-> Utilities-> Show Connections Inspector **» в Xcode 8.1 или просто ** ⌥⌘6 ** , –

0

Вы можете использовать связанные объекты, чтобы избежать подкласса. Что касается setValue: forKey: и setValue: forUndefinedKey:, посмотрите подробности в файле заголовка (NSKeyValueCoding.h).

Согласно вашему описанию, Найдите новый виджет в своем построителе интерфейса и щелкните его правой кнопкой мыши, вы увидите что-то вроде loginButton, который является ненормальным.

0

Сегодня я работал, и я представил эту же ошибку, я использовал ответ Phillip Mills, был прав, и у меня было несколько ярлыков в одном ViewController.xib, которым не были назначены ссылки, у меня есть пять плохих ссылок, когда назначенные ссылки , все работает отлично, спасибо ответ Филлип Миллс.

1

У меня была та же проблема:

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

Проверьте соединения объектов в точке зрения, к которой вы переходите.

0

Перейдите к инспектору соединений вашего xib контроллера FinalViewWithSending &, чтобы удалить ссылку для входа. После этого он будет работать. Попробуйте ... :)

0

Возможно, вы ранее создали LoginButton, Cmd + Shift + F и нашли «LoginButton» и удалили реферирующее устройство и снова построили.

0

Вы можете попробовать, как я исправил свою проблему setValue:forUndefinedKey:]:.

http://i.stack.imgur.com/PDjub.png

3

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

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

У меня эта ошибка, потому что я случайно добавил несколько кнопок в качестве «Розетки», когда хотел добавить их как «Действия». Я удалил полученный код, но плохие соединения все еще были там.

Чтобы найти и удалить их, Просмотр-> Утилиты-> Показать Connections Inspector

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

enter image description here