2012-06-23 3 views
3

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

Я могу заставить его работать нормально, пока я пишу и вызываю метод «presentPopup» из самого viewController. Вместо того, чтобы писать индивидуальный метод в каждом VC, я бы предпочел написать метод в отдельном классе и просто передать параметры для его персонализации.

В любом случае, всякий раз, когда я пытаюсь это сделать, я продолжаю получать знаменитый «этот класс не является ключевым значением, совместимым с кодировкой для ключа». Просто интересно, есть ли у кого-нибудь какие-либо идеи относительно того, как сделать кодировку значений ключа класса совместимой? Или как это сделать вообще? Благодаря!!

ответ

3

Существует простое объяснение в конце этого ответа, но я видел, несколько похожих вопросов недавно, поэтому я подумал, что я бы немного заработал.

Ошибка должна также сообщать вам , который имеет значение. Класс не соответствует ключевому значению. Формулировка вашего вопроса предполагает, что вы думаете, что есть некоторый общий бит кода, который вы можете добавить, чтобы сделать класс «кодирование с ключевым значением». Это не так.

Все объекты касания какао/какао способны выполнять операции кодирования ключевых значений. KVC позволяет вам обращаться к методам доступа с помощью valueForKey: или setValue:forKey: вместо непосредственного использования методов доступа.

Ошибка вы видите будет вдоль линий:

XXX - этот класс не является значением ключа кодирования совместимый для ключа YYY.

XXX - класс, о котором идет речь, YYY - это ключ. Итак, где-то вызывается [xxx setValue:something forKey:@"YYY"].

На данный момент вы думаете «но я никогда не использовал setValue:forKey в своем коде!». Вы можете быть правы. Но это -, используемый фреймворками при загрузке xib-файла - все розетки устанавливаются с использованием кодирования по значению ключа.

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

+0

Очень верно. Я нашел, что эта ссылка помогла мне выполнить именно то, что я хотел сделать: http: //stackoverflow.com/questions/5413949/loading-uiview-from-a-nib-file-without-guesswork –

0

Вы звоните setValue:forKey: метод где-то (вероятно, на NSMutableDictionary где вы должны вызвать setObject:forKey) или что-то подобное ...

+0

Я заметил, что если я удалю эти строки: NSArray * topLevelObjects = [[NSBundle mainBundle] loadNibNamed: @ "PopupAlertView" owner: self options: nil]; PopupAlertView * popup = [topLevelObjects objectAtIndex: 0]; Я больше не получаю ошибку. Но как тогда показать нибу? –

Смежные вопросы