CoreUtils, о которых говорится в других сообщениях, НЕ показывает реальную реализацию большинства функций, которые, как я думаю, вы ищете. В большинстве случаев он предоставляет интерфейсы для фактических функций, которые извлекают данные, которые можно найти здесь:
Он построен на Gnulib с фактическим исходным кодом в Lib-подкаталог
Я загрузил ваш проект.
Ошибка, которую вы получаете, это
'NSUnknownKeyException', причина: '[& lt; UIViewController 0x3927310> setValue: forUndefinedKey:]: этот класс не является ключевым кодом кодирования-
blockquote>Это вызвано контроллером представления
Second
вMainWindow.xib
, имеющим классUIViewController
вместоSecondView
. Проблема в правильном классе решает проблему.Кстати, это плохая практика иметь имена, такие как «строка» в Objective-C. Он приглашает на столкновение с именованием времени выполнения. Избегайте их даже в случаях, когда вы занимаетесь практикой. Именование столкновений может быть очень трудно отследить, и вы не хотите тратить время.
Другая возможная причина этой ошибки: при копировании & amp; вставка элементов из одного контроллера в другой, Xcode каким-то образом сохраняет эту ссылку на исходный контроллер, даже после редактирования & amp; перезапуская этот элемент в новый контроллер.
В моем случае. У меня не было отсутствующих выходов в xib-файлах после слияния.
Shift + Command + K
blockquote>решил мою проблему. Я очистил свой проект и перестроил.
"этот класс не является ключевым значением, совместимым с кодировкой для ключа. Я знаю его немного поздно, но мой ответ отличается, поэтому я думаю, что он должен быть опубликован. Я неправильно нажимал второй контроллер. Вот пример
Неправильный способ нажатия контроллера
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];
Я не нашел ответа, как указано выше, так что может быть, это может помочь кому-то с той же проблемой
Глядя на другие ответы, кажется, что есть много вещей, которые могут вызвать эту ошибку. Вот еще один.
Если у вас
Тогда вы также можете получить ошибку, аналогичную
Не удалось установить (xxx) пользовательское проверенное свойство в [Свой пользовательский вид] ...: этот класс не ключевое значение, кодирующее для ключа [xxx].
Решение состоит в том, чтобы удалить старое свойство.
Откройте инспектор удостоверений для своего класса, выберите имя свойства в разделе «Определенные пользователем атрибуты времени выполнения» и нажмите кнопку «минус» (-).
У меня была эта ошибка много раз. Хотя ответ TechZen абсолютно прав в этом случае, еще одной распространенной причиной является изменение имени свойства IBOutlet в вашем .h / .m, которое вы уже подключили к владельцу файла в nib.
Из вашего ниба:
Еще одна распространенная причина, если вы используете Storyboard, ваш UIButton может иметь более одного присваивания (решение почти такое же, как для nib):
[/g0] [/g1]
Мое исправление было похоже на Gerard Grundy's. При создании пользовательского UITableViewCell с использованием XIB я ошибочно применил имя пользовательского класса к владельцу файла, а не к UITableViewCell. Применение класса к UITableViewCell на холсте и подключение к нему свойств IBOutlet решило проблему.
Просто чтобы добавить к этому, потому что я тоже получал эту ошибку. Прохождение всех этих ответов наиболее похоже на работу с пользовательским интерфейсом и материалами раскадровки. Я знаю, что исходный плакат, похоже, работает с пользовательским интерфейсом, но при поиске возможных причин этой ошибки в основном все вопросы возвращаются к этому вопросу, а остальные закрываются как дубликаты или просто возникают проблемы с подключением вещей в раскадровке, поэтому я буду добавьте мое решение.
Я работал над кодированием веб-службы в 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, которые соединяются
blockquote>
Если у вас есть пользовательский подкласс UIViewController с IBOutlets, который вызывает проблемы, единственный набор шагов, которые я нашел, чтобы действительно избавиться от ошибки, были
.1 Измените класс на UIViewController
.2 Отсоедините все розетки (теперь все они будут иметь желтый предупреждающий треугольник) - этого может быть достаточно, чтобы отключить проблемные розетки.
.3 Выполняйте все стандартные шаги - ↑ ⌘K, удалить производные данные (, молитвенные маты, бусины беспокойства)
.4 Запустить приложение - перейти к проблемной сцене.
.5 Убить приложение, вернуться к интерфейсу Builder изменит класс на ваше собственное имя класса.
.6 Подключите ваши точки.
Запустите приложение & amp; это, как правило, устраняет проблемы соблюдения ключевого значения.
У меня была аналогичная проблема для проекта, который имеет две цели (с их собственным MainWindow XIB). Основная проблема, вызвавшая эту ошибку для меня, заключалась в том, что класс UIViewController не был включен в список ресурсов второго проекта. То есть конструктор интерфейса позволил мне указать его в MainWindow.xib, но во время выполнения система не смогла найти класс.
I.e. cmd-click в рассматриваемом классе UIViewController и дважды проверьте, что он включен в вкладку «Цели».
Свойство «Module» контроллера View в Identity Inspector может отличаться от ожидаемого. Также убедитесь, что новые классы добавлены в ваш целевой список.
У меня была такая же проблема, и хотя ответ TechZen действительно может быть потрясающим, мне было трудно применить мою ситуацию.
В конце концов я решил проблему, связав метку с помощью контроллера, указанного в разделе «Объекты» (выделенного на изображении ниже), а затем через File Owner.
Надеюсь, это поможет.
[/g0]
Если это приложение для iPhone, а не универсальное, убедитесь, что следующее поле пуст:
Цели> Сводка> Информация о развертывании iPhone / iPod> Основной интерфейс
Если вы укажете xib, он сработает.
Это может произойти из-за того, что у вас есть контроль, который вытащил и создал выход или действие, и забыл его удалить. Даже если вы удалили код или даже если вы сделали достаточно cmd + Z, вам нужно будет подключиться к инспектору соединений вашей раскадровки и посмотреть, не создано ли действие или выход, которые вы создали, или нет.
Еще одна «несоответствующая» проблема, которую я обнаружил, когда-то мне удалось получить две копии класса по какой-то причине.
Я добавлял ключи к неправильной копии. Интерфейс Builder все еще видел ключи и позволял мне подключаться к ним, но во время выполнения он использовал другую копию класса, у которой не было новых ключей.
Чтобы найти, какая была «правильная» копия, я использовал cmd-click XCode для имени класса в другом месте, чтобы перейти к правильной копии, затем я удалил плохие неиспользуемые копии (после внесения моих изменений из неиспользуемая копия).
Мораль истории: файлы с дублирующимися файлами плохие.
IBOutlet
один раз, метку IBOutlet
, что ваш ivar не нужен. UIViewController
? В какой-то момент вы должны называть [SecondView initWithNibName:@"yourNibName" bundle:nil];
-initWithNibName
с неправильным именем ниба.
– jlstrecker
25 October 2011 в 19:11
У меня была эта проблема в моем дублированном проекте и решена путем проверки 2-х мест:
1- Убедитесь, что у вас есть .m-файл в списке -> Project - Build Phases - Compile Sources 2- После этого перейдите в построитель интерфейсов (возможно, это ошибка только с IB) и отмените все свойства, метки, изображения и т. Д. Затем перевяжите все. Я понял, что я удалил атрибут, но он все еще был связан в IB.
Надеюсь, что это сработает для некоторых.
Это происходило со мной только при отладке устройства (iPhone). Симулятор iOS работал нормально. Выполнение «продукта -> чистка» из Xcode, похоже, решило проблему, но я понятия не имею, почему.
Это может быть ссылка на компонент из интерфейса Xib, который вы переименовали или удалили. Для меня работает референция.
У меня был такой же симптом. Основная причина заключалась в том, что «Target Membership» для моего исходного файла не было установлено в правильную цель. Я предполагаю, что мой класс не будет создан и включен в мое приложение.
Чтобы исправить его:
Надеюсь, это поможет кому-то там.
Иногда это связано с вашим «Inherit From Target». Это значение должно быть установлено. С помощью отдельных целевых приложений вы можете просто выбрать Inherit From Target. Если у вас больше одной цели, выберите желаемую цель.
Это происходит со мной, когда мой контроллер представления первоначально имел .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];
}
У меня такая же проблема. Я сбросил симулятор. Удаление и добавление кнопки управления. и, наконец, сделал чистый. :) Благодаря переполнению стека. Некоторые о том, как мой код стал нормально и начал работать.
Эта ошибка - это что-то еще!
Вот как я ее исправил. Я использую xcode Version 6.1.1 и использую swift. Я получал эту ошибку каждый раз, когда мое приложение пыталось выполнить segue, чтобы перейти к следующему экрану.
Приветствия,
Мне пришлось удалить приложение из симулятора / iPhone, чтобы избавиться от этой ошибки.
Я получал эту ошибку с раскадровки. Вышеупомянутое решение, похоже, не было проблемой, поэтому я в конечном итоге удалил контроллер представления и снова добавил его (и, конечно, повторно подключил segue и переназначил класс), который его исправил. Я не знаю, что это было на самом деле, но я переименовал соответствующий класс контроллера вида незадолго до этого, так что, возможно, это что-то укусило.
Эта ошибка указывает, что уже подключенный объект Interface Builder удален / переименован в источнике своего владельца (владелец файла).
Нажмите «Control» на Владелец файлов в построителе интерфейса, если вы видите восклицательный знак, который вам нужно исправить.
На рисунке ниже вы видите, что «aRemovedView» имеет восклицательный знак справа, потому что я удалил объект представления IBOutlet, пока он уже был подключен в IB.
[/g1]
Это дает следующую ошибку: Завершение приложения из-за неотображенного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не является ключевым кодом - совместим для ключа aRemovedView. '
У меня была эта ошибка, когда я пытался реализовать пользовательский ViewCell для таблицы. Когда я выделил контроллер View для XIB и подключился к элементам CellView, возникла ошибка «этот класс не является ключевым значением, совместимым с кодировкой для ключа», как только я удалю их, он избавился от этой ошибки.
Удалить соединения на изображении ниже. [/g0]
Просто убедитесь, что у вас есть только соединения с ячейкой Table View. Для проверки нажмите на ячейку просмотра таблицы и в INSPECTOR найдите свои соединения.
[/g1]
В моем случае это было вызвано ссылкой неправильного Nib:
BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];
У меня было то же сообщение об ошибке и спасибо (!!) Кире от 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];
в моем случае это была ошибка в исходном коде раскадровки, выполните следующие действия:
<connections>
Например:
<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-теги;)