显示一个UIView子类 – 这个类不是密钥的关键值

我试图创build一个自定义的popup视图,可以从多个视图控制器调用,但即时通讯有一些麻烦。

只要我从viewController本身编写并调用“presentPopup”方法,我就能够正常工作。 而不是在每个VC写一个单独的方法,我更喜欢在一个单独的类写一个方法,只是传递参数来个性化它。

无论如何,每当我试图这样做,我不断得到着名的“这个类是不是关键的价值编码的关键”的错误。 只是想知道是否有人对如何使类关键值编码合规性有所了解? 或者如何去解决这个问题? 谢谢!!

这个答案最后有一个简单的解释,但是我最近看到了一些类似的问题,所以我想我会给出一些背景知识。

该错误也应该告诉你哪个类的关键值不符合标准。 你的问题的措辞表明,你认为有一些你可以添加一些代码,使一个类“键值编码兼容”。 事实并非如此。

所有cocoa/cocoa触摸物体都能够执行键值编码操作。 KVC允许您通过使用valueForKey:setValue:forKey:而不是直接使用访问器方法来访问访问器方法。

你所看到的错误将会是:

XXX – 此类不是YYY关键字的关键值编码。

XXX是有问题的class级,YYY是关键。 所以在某处, [xxx setValue:something forKey:@"YYY"]被调用。

在这一点上,你在想“但我从来没有在我的代码中使用setValue:forKey !”。 也许你是对的。 但是当你加载一个xib文件的时候它框架使用 – 所有的sockets都是使用键值编码来设置的。

所以,你将会在你的xib中有一个sockets,这个sockets被连接到已经被删除或者在它所链接的类中被重命名的东西。 如果你幸运的话,它旁边会有一个小惊叹号。 如果你不是,你甚至不会在界面构build器中看到它,你将不得不编辑xib作为源代码,并将其从XML中删除。

你正在调用setValue:forKey:方法(可能,你应该调用setObject:forKeyNSMutableDictionary )或类似的东西…