сбой приложения при нажатии кнопки ios [duplicate]

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

Он построен на Gnulib с фактическим исходным кодом в Lib-подкаталог

993
задан 21 revs, 13 users 40% 22 March 2017 в 17:20
поделиться

30 ответов

Контроллер вашего представления может иметь неправильный класс в вашем xib.

Я загрузил ваш проект.

Ошибка, которую вы получаете, это

'NSUnknownKeyException', причина: '[& lt; UIViewController 0x3927310> setValue: forUndefinedKey:]: этот класс не является ключевым кодом кодирования-

Это вызвано контроллером представления Second в MainWindow.xib, имеющим класс UIViewController вместо SecondView. Проблема в правильном классе решает проблему.

Кстати, это плохая практика иметь имена, такие как «строка» в Objective-C. Он приглашает на столкновение с именованием времени выполнения. Избегайте их даже в случаях, когда вы занимаетесь практикой. Именование столкновений может быть очень трудно отследить, и вы не хотите тратить время.

Другая возможная причина этой ошибки: при копировании & amp; вставка элементов из одного контроллера в другой, Xcode каким-то образом сохраняет эту ссылку на исходный контроллер, даже после редактирования & amp; перезапуская этот элемент в новый контроллер.

810
ответ дан 7 revs, 5 users 64% 16 August 2018 в 05:10
поделиться
  • 1
    Также не забудьте соединить «просмотр», розетку ниба в розетку просмотра файла владельца (выходная точка вашего пользовательского класса, унаследованная от UIViewController). Это можно сделать путем перетаскивания элемента управления из «Владелец файла», под «Держатели мест» к "представлению" в разделе «Объекты» и выбор выходного отверстия. – Nirma 11 August 2011 в 15:49
  • 2
    Я убедился, что все классы уже установлены, но NSUnknownKeyException все еще выходит :( – Zennichimaro 3 April 2013 в 04:40
  • 3
    Я даже не использую Interface Builder, и я все еще получаю эту ошибку. Любая идея, что происходит? – sudo 9 March 2014 в 09:18
  • 4
    Неважно. Это было связано с двумя вещами: Xcode по-прежнему обращался к моей основной раскадровке, хотя она была удалена из проекта, и симулятор ее кэшировал. Я очень не рекомендую использовать раскадровки или NIB - они смехотворно проблематичны. – sudo 9 March 2014 в 09:24
  • 5
    @ Джош Лол. Каждый раз, когда я разрабатываю мотивацию создания собственного приложения в xcode, он всегда заканчивается тем, что я провожу день, пытаясь понять, как это сделать. Я c # dev, поэтому в последнее время я искал предложения от Xamarin и Telerik (nativescript). – The Muffin Man 13 May 2015 в 15:02

В моем случае. У меня не было отсутствующих выходов в xib-файлах после слияния.

Shift + Command + K

решил мою проблему. Я очистил свой проект и перестроил.

5
ответ дан 2 revs 16 August 2018 в 05:10
поделиться

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

Неправильный способ нажатия контроллера

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

Правильный путь

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

Я не нашел ответа, как указано выше, так что может быть, это может помочь кому-то с той же проблемой

33
ответ дан 2 revs, 2 users 78% 16 August 2018 в 05:10
поделиться

Глядя на другие ответы, кажется, что есть много вещей, которые могут вызвать эту ошибку. Вот еще один.

Если у вас

  • есть пользовательский вид
  • , добавлено свойство @IBInspectable
  • , а затем удалено его

Тогда вы также можете получить ошибку, аналогичную

Не удалось установить (xxx) пользовательское проверенное свойство в [Свой пользовательский вид] ...: этот класс не ключевое значение, кодирующее для ключа [xxx].

Решение состоит в том, чтобы удалить старое свойство.

Откройте инспектор удостоверений для своего класса, выберите имя свойства в разделе «Определенные пользователем атрибуты времени выполнения» и нажмите кнопку «минус» (-).

15
ответ дан 2 revs, 2 users 98% 16 August 2018 в 05:10
поделиться

У вас может быть плохое соединение в вашем xib.

У меня была эта ошибка много раз. Хотя ответ TechZen абсолютно прав в этом случае, еще одной распространенной причиной является изменение имени свойства IBOutlet в вашем .h / .m, которое вы уже подключили к владельцу файла в nib.

Из вашего ниба:

  1. Выберите объект в IB и перейдите к «Инспектору подключений».
  2. В разделе «Резервные точки» убедитесь, что ваш объект еще не установлен связанный со старым именем свойства ... если это так, щелкните маленькое «x», чтобы удалить ссылку и построить снова. example 1 [/g2]

Еще одна распространенная причина, если вы используете Storyboard, ваш UIButton может иметь более одного присваивания (решение почти такое же, как для nib):

  1. Откройте раскадровку и щелкните правой кнопкой мыши UIButton
  2. . Вы увидите, что на этой кнопке есть несколько ссылок / ссылок. Удалите одно из окон «Main ...» с серым цветом с небольшим «x»:
1399
ответ дан 6 revs, 5 users 39% 16 August 2018 в 05:10
поделиться
  • 1
    Благодаря! В моем случае у меня было 2 выхода на один и тот же взгляд, и избавление от старого и подключение представления к новому закончилось исключением. – Mark Patterson 4 February 2014 в 00:31
  • 2
    мой дублировал дважды. Я начал отключать каждый из них после того, как я перетащил из версии Pro (из версии Lite), думая, что он висит на соединениях в другом проекте. Когда я столкнулся с дубликатом, и потребовалось 3 щелчка, чтобы отключить связь, я искренне желаю, чтобы я сделал это на 3 дня раньше. О, хорошо, такова жизнь дев. – aremvee 26 January 2016 в 05:16
  • 3
    У меня была проблема, что у UIButton было несколько назначений. Это решило мою проблему. – mythicalcoder 17 April 2016 в 16:07
  • 4
    У меня тоже была эта пробема. Не забудьте проверить подключения к розетке в определенных точках зрения, а не только наблюдения. В моем случае супервизоры не показывали неправильные подключения = / – Augusto Carmo 19 September 2016 в 14:29
  • 5
    У меня была аналогичная ошибка, когда я подключил выход кнопки к неправильному файлу SwC ViewController, чья страница еще не была создана с помощью GUI – brw59 25 February 2017 в 00:56

enter image description here [/g0] enter image description here [/g1]

Мое исправление было похоже на Gerard Grundy's. При создании пользовательского UITableViewCell с использованием XIB я ошибочно применил имя пользовательского класса к владельцу файла, а не к UITableViewCell. Применение класса к UITableViewCell на холсте и подключение к нему свойств IBOutlet решило проблему.

27
ответ дан ashack 16 August 2018 в 05:10
поделиться
  • 1
    Ayyy dag nab it ... Не могу поверить, как часто я делаю эту ошибку. Благодаря лол – Benjamin 11 May 2018 в 14:13

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

Я работал над кодированием веб-службы в Swift 2. Я создал все необходимые прокси-объекты и заглушки. Когда я зациклился на возвращаемом XML, я динамически создавал экземпляры объектов, все из которых исходили от NSObject и использовали setValue:forKey. Каждый раз, когда setValue:forKey пытался установить свойство, он взорвался этой ошибкой.

У меня был оператор switch для каждого типа, с которым я имел дело (например, Bool?, CShort?, String?) и для каждого узла XML я прошел и проверил, какой тип был на объекте, а затем преобразовал значение в этот тип и попытался установить его с помощью setValue:forKey.

В конце концов я начал комментировать все эти setValue:forKey, и обнаружил, что мой оператор default для оператора default работает String?.

Наконец, я понял, что вы не можете использовать необязательные быстрые типы с setValue:forKey, если у них нет прямого сопоставления к объекту-C, например String? или NSNumber?. В итоге я изменил все CShort? типы на NSNumber?, так как это имеет прямое сопоставление. Для Bool? в моем случае для меня было просто использовать Bool и инициализировать его до false. У других, возможно, нет этой роскоши.

Во всяком случае, какая головная боль, которая так надеялась, помогает кому-то другому, у кого есть аналогичная проблема, и продолжает перенаправляться на этот вопрос и говорить себе: «Я ничего не делаю в UI !! ".

Итак, чтобы еще раз повторить еще раз, Key-Value Coding не работает с опциями. Ниже я оказался где-то, но я забыл, где именно, кто бы ни отправил это, я извиняюсь и буду отчитываться, если вспомню, где я это нашел, но это спасло мою жизнь:

Вы не можете использовать KVC на Необязательное свойство Int, потому что KVC - это Cocoa / Objective-C, а Objective-C не может видеть необязательный Int - он не привязан к Objective-C. Objective-C может видеть только типы, которые соединяются с классами класса Objective-C:

, которые получены из типов классов NSObject

, которые отображаются с помощью @objc

Строки Swift, которые соединяются

7
ответ дан AtheistP3ace 16 August 2018 в 05:10
поделиться

Если у вас есть пользовательский подкласс UIViewController с IBOutlets, который вызывает проблемы, единственный набор шагов, которые я нашел, чтобы действительно избавиться от ошибки, были

.1 Измените класс на UIViewController

.2 Отсоедините все розетки (теперь все они будут иметь желтый предупреждающий треугольник) - этого может быть достаточно, чтобы отключить проблемные розетки.

.3 Выполняйте все стандартные шаги - ↑ ⌘K, удалить производные данные (, молитвенные маты, бусины беспокойства)

.4 Запустить приложение - перейти к проблемной сцене.

.5 Убить приложение, вернуться к интерфейсу Builder изменит класс на ваше собственное имя класса.

.6 Подключите ваши точки.

Запустите приложение & amp; это, как правило, устраняет проблемы соблюдения ключевого значения.

5
ответ дан Damo 16 August 2018 в 05:10
поделиться

У меня была аналогичная проблема для проекта, который имеет две цели (с их собственным MainWindow XIB). Основная проблема, вызвавшая эту ошибку для меня, заключалась в том, что класс UIViewController не был включен в список ресурсов второго проекта. То есть конструктор интерфейса позволил мне указать его в MainWindow.xib, но во время выполнения система не смогла найти класс.

I.e. cmd-click в рассматриваемом классе UIViewController и дважды проверьте, что он включен в вкладку «Цели».

10
ответ дан David Carney 16 August 2018 в 05:10
поделиться

Свойство «Module» контроллера View в Identity Inspector может отличаться от ожидаемого. Также убедитесь, что новые классы добавлены в ваш целевой список.

12
ответ дан ercu 16 August 2018 в 05:10
поделиться
  • 1
    голосуя, так как это было в моем случае. Я использую Swift и Storyboards. Когда я создал новую цель сборки (чтобы сделать вариант сборки), приложение не работало в новом варианте, в то время как первая работала нормально. Приложение разбилось на контроллер просмотра, где имя модуля было каким-то образом настроено на модуль от первой цели, тогда как в рабочих контроллерах View это было Current - & lt; module name here & gt; . В этом случае вам нужно удалить имя модуля. – Mixaz 26 April 2016 в 09:58
  • 2
    Ты просто спас мне жизнь! Огромное спасибо!!! – joliejuly 4 July 2018 в 18:10

У меня была такая же проблема, и хотя ответ TechZen действительно может быть потрясающим, мне было трудно применить мою ситуацию.

В конце концов я решил проблему, связав метку с помощью контроллера, указанного в разделе «Объекты» (выделенного на изображении ниже), а затем через File Owner.

Надеюсь, это поможет.

enter image description here [/g0]

40
ответ дан Eric Brotto 16 August 2018 в 05:10
поделиться

Если это приложение для iPhone, а не универсальное, убедитесь, что следующее поле пуст:

Цели> Сводка> Информация о развертывании iPhone / iPod> Основной интерфейс

Если вы укажете xib, он сработает.

61
ответ дан erkanyildiz 16 August 2018 в 05:10
поделиться
  • 1
    Да, это было для меня. Когда вы добавляете новый контроллер представления запуска, я устанавливаю его в новый класс / nib. После подключения розетки я ударил эту ошибку. Очистка этого поля исправила его. – terriblememory 14 July 2012 в 00:55
  • 2
    Это сработало для меня. Обратите внимание, что мне также пришлось удалить старую версию с устройства / симулятора, чтобы она работала. – jimt 16 October 2012 в 21:57
  • 3
    Спасибо, это была моя проблема. Я переименовал свой файл раскадровки iPad и не обновлялся в префиксах моего проекта. – RobertJoseph 17 December 2012 в 18:35
  • 4
    Спасибо! Это решило это для меня. (Я должен был удалить приложение из симулятора после изменения поля основного интерфейса, чтобы быть пустым. Простое изменение этого поля не заставило симулятор сломать кеш.) – snipe 31 August 2013 в 09:32
  • 5
    Я вспомнил, что я изменил вещи из универсального приложения в приложение только для iphone, и это исправило ошибку! – Justin 6 August 2015 в 14:22

Это может произойти из-за того, что у вас есть контроль, который вытащил и создал выход или действие, и забыл его удалить. Даже если вы удалили код или даже если вы сделали достаточно cmd + Z, вам нужно будет подключиться к инспектору соединений вашей раскадровки и посмотреть, не создано ли действие или выход, которые вы создали, или нет.

19
ответ дан Ilansky Naftali 16 August 2018 в 05:10
поделиться
  • 1
    Благодаря! Я n00b на Xcode и взял меня на некоторое время, чтобы найти ссылки изгоев. В Xcode 9.2 вы можете щелкнуть правой кнопкой мыши элемент в представлении раскадровки и проверить «Резервные точки». – kunigami 22 January 2018 в 08:00

Еще одна «несоответствующая» проблема, которую я обнаружил, когда-то мне удалось получить две копии класса по какой-то причине.

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

Чтобы найти, какая была «правильная» копия, я использовал cmd-click XCode для имени класса в другом месте, чтобы перейти к правильной копии, затем я удалил плохие неиспользуемые копии (после внесения моих изменений из неиспользуемая копия).

Мораль истории: файлы с дублирующимися файлами плохие.

7
ответ дан Jason 16 August 2018 в 05:10
поделиться
  • 1
    Обновлено с помощью источника проекта. – Echilon 16 May 2011 в 18:27
  1. Вам нужно только указать IBOutlet один раз, метку IBOutlet, что ваш ivar не нужен.
  2. Создаете ли вы свой NIB с помощью UIViewController? В какой-то момент вы должны называть [SecondView initWithNibName:@"yourNibName" bundle:nil];
27
ответ дан kubi 16 August 2018 в 05:10
поделиться
  • 1
    Это помогло! Я получал ошибку соответствия кодировки значения ключа в отношении свойства из другого контроллера представления. Оказывается, я вызывал -initWithNibName с неправильным именем ниба. – jlstrecker 25 October 2011 в 19:11
  • 2
    Да, это тоже помогло мне .. Я использовал UIViewController вместо MyCustomeViewController .. но это своего рода проблема иерархии. Возможно, интроспекция завершилась неудачей из-за пропущенного объекта класса. Спасибо в любом случае – Futur 12 December 2011 в 07:38

У меня была эта проблема в моем дублированном проекте и решена путем проверки 2-х мест:

1- Убедитесь, что у вас есть .m-файл в списке -> Project - Build Phases - Compile Sources 2- После этого перейдите в построитель интерфейсов (возможно, это ошибка только с IB) и отмените все свойства, метки, изображения и т. Д. Затем перевяжите все. Я понял, что я удалил атрибут, но он все еще был связан в IB.

Надеюсь, что это сработает для некоторых.

8
ответ дан kubilay 16 August 2018 в 05:10
поделиться

Это происходило со мной только при отладке устройства (iPhone). Симулятор iOS работал нормально. Выполнение «продукта -> чистка» из Xcode, похоже, решило проблему, но я понятия не имею, почему.

29
ответ дан Maj 16 August 2018 в 05:10
поделиться
  • 1
    Это решает мою проблему. tsk2x почти 3 дня головной боли. – user3818576 29 January 2015 в 04:06
  • 2
    Это дает ответ на вопрос. Что-то перепуталось с Нибом и решило его. Я прочитал и пробовал все вышеизложенное безрезультатно, а затем сделал чистую, и после 1 часа попытки исправить это решение Маджа исправило это. Мне бы очень хотелось увидеть, что в XML могло вызвать это, но я перешел. – LevinsonTechnologies 8 April 2015 в 18:47
  • 3
    Это действительно решает проблему - я попробовал множество предложений выше, и только проект очистил эту ошибку, которая внезапно начала происходить. Ugg ... – DustinB 12 May 2015 в 05:03
  • 4
    Это исправить мою проблему, я пробовал много предложений. Кажется странным! – Naveen Shan 29 December 2015 в 06:30

Это может быть ссылка на компонент из интерфейса Xib, который вы переименовали или удалили. Для меня работает референция.

8
ответ дан MehrozKarim 16 August 2018 в 05:10
поделиться

У меня был такой же симптом. Основная причина заключалась в том, что «Target Membership» для моего исходного файла не было установлено в правильную цель. Я предполагаю, что мой класс не будет создан и включен в мое приложение.

Чтобы исправить его:

  1. Выделите ваш .m-файл.
  2. На правой панели выберите «Инспектор файлов».
  3. В разделе «Целевое членство» убедитесь, что установлен целевой объект сборки.

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

6
ответ дан Mike M. Lin 16 August 2018 в 05:10
поделиться

Иногда это связано с вашим «Inherit From Target». Это значение должно быть установлено. С помощью отдельных целевых приложений вы можете просто выбрать Inherit From Target. Если у вас больше одной цели, выберите желаемую цель.

41
ответ дан mrabins 16 August 2018 в 05:10
поделиться
  • 1
    Этот ответ помог мне в конкретном случае. Я должен продолжить работу над старым проектом obj-c с несколькими целями. Я создаю пользовательский UITableViewCell в Swift, и у меня была такая же ошибка. Включая "Наследовать от цели" это сработало. Спасибо! – magohamoth 11 April 2017 в 07:59
  • 2
    это реальное решение. Вы спасли мою жизнь – Deniz Yazar 16 November 2017 в 18:14
  • 3
    Модуль не всегда установлен правильно; например если вы заполните имя класса до фактического создания класса. – Johan 22 December 2017 в 11:45
  • 4

Это происходит со мной, когда мой контроллер представления первоначально имел .xib-файл, но теперь он создан программно.

Даже несмотря на то, что я удалил файл .xib из этого проекта. Пользователи iPhone / iPad могут содержать файлы .xib для этого диспетчера представлений.

Попытка загрузить файл .xib обычно вызывает этот сбой:

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

Решение при его создании программно может это:

-(void)loadView {
    // Ensure that we don't load an .xib file for this viewcontroller
    self.view = [UIView new];
}
15
ответ дан neoneye 16 August 2018 в 05:10
поделиться

У меня такая же проблема. Я сбросил симулятор. Удаление и добавление кнопки управления. и, наконец, сделал чистый. :) Благодаря переполнению стека. Некоторые о том, как мой код стал нормально и начал работать.

3
ответ дан priya 16 August 2018 в 05:10
поделиться

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

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

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

Приветствия,

7
ответ дан Ronaldoh1 16 August 2018 в 05:10
поделиться

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

101
ответ дан Steve Rogers 16 August 2018 в 05:10
поделиться
  • 1
    +1 это исправило это для меня. Я очищал код, который использовал IB. Когда я удалял кнопку из кода, ошибка продолжала появляться, даже когда эта кнопка вообще не упоминалась в файлах nib (по крайней мере, я мог видеть). – SundayMonday 26 September 2012 в 21:34
  • 2
    Я считаю, что это необходимо, если вы отлаживаете два приложения, которые имеют одно и то же имя. – Anton 29 May 2013 в 23:52
  • 3
    Да, кажется, что что-то из XIB кэшируется на симуляторе, что является болью, если вы тестируете обновления, поскольку на самом деле вы не хотите удалять старое приложение. – Carlos P 31 July 2013 в 12:14
  • 4
    У меня была проблема с удалением моего XIB-файла. Это поставило проблему. – balboa 25 November 2014 в 18:17
  • 5
    Если удаление приложения не работает, попробуйте удалить папку XCode DerivedData. который может кэшировать неправильный файл xib. Открыть XCode - & gt; Предпочтения - & gt; Местоположения - & gt; Откройте папку DerivedData и перетащите ее в корзину. – Philip Fung 18 August 2015 в 21:05

Я получал эту ошибку с раскадровки. Вышеупомянутое решение, похоже, не было проблемой, поэтому я в конечном итоге удалил контроллер представления и снова добавил его (и, конечно, повторно подключил segue и переназначил класс), который его исправил. Я не знаю, что это было на самом деле, но я переименовал соответствующий класс контроллера вида незадолго до этого, так что, возможно, это что-то укусило.

3
ответ дан Symmetric 16 August 2018 в 05:10
поделиться
  • 1
    Я снова получил эту ошибку. На этот раз я создал новый пустой контроллер табличного представления с присвоенным ему классом, оставив нерабочий один и переместил его в него. Это сработало. Затем я медленно копировал каждый элемент в представлении до тех пор, пока он не сработает снова. На этот раз проблема оказалась в том, что я назначил некоторые «Пользовательские атрибуты времени выполнения»; для сборщика (я думал, что могу использовать их для инициализации сборщика, поэтому мне не пришлось бы делать это в коде, не знаю, если это возможно). Удаление этого исправлено. Эта ошибка действительно ужасна, я надеюсь, что она улучшится в будущей версии! – Symmetric 7 January 2012 в 06:39

Эта ошибка указывает, что уже подключенный объект Interface Builder удален / переименован в источнике своего владельца (владелец файла).

Нажмите «Control» на Владелец файлов в построителе интерфейса, если вы видите восклицательный знак, который вам нужно исправить.

На рисунке ниже вы видите, что «aRemovedView» имеет восклицательный знак справа, потому что я удалил объект представления IBOutlet, пока он уже был подключен в IB.

enter image description here [/g1]

Это дает следующую ошибку: Завершение приложения из-за неотображенного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не является ключевым кодом - совместим для ключа aRemovedView. '

57
ответ дан Tibidabo 16 August 2018 в 05:10
поделиться
  • 1
    Спасибо! Это исправило это для меня. У меня была эта проблема в течение длительного времени, и я не знал, как ее исправить, кроме как начать с нуля. Именно он удалил IBOutlets из контроллера представления, но не знал, что они все еще ссылаются / связаны у владельца (в данном случае «View Controller» в построителе интерфейса - Xcode 6). – Ira Herman 1 October 2014 в 08:01

У меня была эта ошибка, когда я пытался реализовать пользовательский ViewCell для таблицы. Когда я выделил контроллер View для XIB и подключился к элементам CellView, возникла ошибка «этот класс не является ключевым значением, совместимым с кодировкой для ключа», как только я удалю их, он избавился от этой ошибки.

Удалить соединения на изображении ниже. Delete the connections in inspector when File Owner is highlighted [/g0]

Просто убедитесь, что у вас есть только соединения с ячейкой Table View. Для проверки нажмите на ячейку просмотра таблицы и в INSPECTOR найдите свои соединения.

The connection should be in here when Table View Cell is highlighted [/g1]

84
ответ дан uplearnedu.com 16 August 2018 в 05:10
поделиться
  • 1
    Это сделало это для меня, спасибо. Я отключил соединения, когда «Владелец файла» была выбрана в левом столбце, затем выбрана моя пользовательская ячейка и повторно привязана к ним. Успех! – Rogare 4 December 2014 в 22:35
  • 2
    Даже с помощью xcode7 это работает, просто используйте правую панель «Инспектор подключений». Удалите розетку из стола tableview и с этикетки, затем снова добавьте ее, и все должно работать. – lifeisfoo 30 December 2015 в 09:28
  • 3
    Это работает, но вам нужно убедиться, что FileOwner не получил настройки! Владелец файла должен оставаться NSObject. [Д0] stackoverflow.com/questions/13793162/… – user2704776 27 February 2017 в 16:32
  • 4

В моем случае это было вызвано ссылкой неправильного Nib:

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];
4
ответ дан wspruijt 16 August 2018 в 05:10
поделиться
  • 1
    Случается со мной, когда я переименую класс контроллера представления и забываю, что имя ниба тоже должно измениться. Поскольку имя nib - это просто строка, ошибки компилятора отсутствуют. – kris 12 July 2015 в 21:47

У меня было то же сообщение об ошибке и спасибо (!!) Кире от http://www.idev101.com Я смог решить проблему. Я только нашел ее сайт после поиска и укладки всех этих потоков. Я теперь размещаю здесь для следующего, который приходит в StackOverFlow, и имеет тот же вызов, что и с тех пор, как этот человек, скорее всего, придет к этой теме через Google.

Я понял, что ошибочно сделал это:

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

Вместо этого:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

Где

DeviceViewController

Явилось имя моего класса, также известного как

DeviceViewController.h 
DeviceViewController.m

В вашей реализации (файл .m) вам нужно будет

"import DeviceViewController.h"

, где вы хотите позвонить, например еще один UIViewController.

Мне абсолютно не жаль, если я только заявляю очевидное для новичков, как я, и могу получить голоса, поскольку это не совсем связано с вопросом, но я искал 4 (?!?) часов прямо сейчас, чтобы ответить на это сообщение об ошибке. Если я могу избавить это от 1 или 2 человек, это будет здорово:)

PS: Для тех, кто заинтересован в том, как код продолжает загрузку другого UIViewController:

    [self presentViewController:deviceViewController animated:YES completion:nil];
21
ответ дан Yannis 16 August 2018 в 05:10
поделиться
  • 1
    СПАСИБО для всех шагов там, я использовал Xcode 5 и не знал, как вручную добавить наконечник, поскольку по умолчанию можно добавить только раскадровку. У меня есть несколько инструкций, но не так подробно, как у вас. Действительно помогли! – Pittfall 10 October 2013 в 21:39

в моем случае это была ошибка в исходном коде раскадровки, выполните следующие действия:

  1. сначала откройте свою историю в качестве исходного кода
  2. выполните поиск <connections>
  3. удалить нежелательные соединения

Например:

<connections>
    <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
    <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
    <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>

Как вы видите, это соединения между именами ваших кодовых переменных и раскадрой макет xml-теги;)

33
ответ дан 2 revs, 2 users 78% 16 August 2018 в 05:10
поделиться