我正在尝试创建一个可以从多个视图控制器调用的自定义弹出视图,但我遇到了一些麻烦。
只要我从 viewController 本身编写并调用“presentPopup”方法,我就能让它正常工作。与其在每个 VC 中编写一个单独的方法,我更愿意在一个单独的类中编写一个方法,然后只传递参数来个性化它。
无论如何,每当我尝试这样做时,我都会不断收到著名的“此类与键的键值编码不兼容”错误。只是想知道是否有人对如何使类键值编码兼容有任何见解?或者一般如何解决这个问题?谢谢!!
这个答案的末尾有一个简单的解释,但是我最近看到了一些类似的问题,所以我想我会提供一些背景知识。
该错误还应该告诉您该类不符合键值编码的哪个键。您问题的措辞表明您认为可以添加一些通用代码以使类“符合键值编码”。事实并非如此。
所有可可/可可触摸对象都能够执行键值编码操作。KVC 允许您通过使用valueForKey:
或setValue:forKey:
代替直接使用访问器方法来访问访问器方法。
您看到的错误将类似于:
XXX - 此类不符合键 YYY 的键值编码。
XXX 是有问题的班级,YYY 是关键。所以在某个地方,[xxx setValue:something forKey:@"YYY"]
正在被调用。
在这一点上,你在想“但我从来没有setValue:forKey
在我的代码中使用过!”。你可能是对的。但是当您加载 xib 文件时,框架会使用它-所有的出口都是使用键值编码设置的。
因此,您的 xib 中将有一个出口,该出口连接到已在其链接的类中删除或重命名的内容。如果幸运的话,它旁边会有一个小感叹号。如果不是,您甚至不会在界面生成器中看到它,您必须将 xib 作为源代码进行编辑并将其从 XML 中删除。
您正在setValue:forKey:
某处调用方法(可能是NSMutableDictionary
在您应该调用的地方setObject:forKey
)或类似的东西......