展示UIView子类 - 这个类不符合关键值编码的要求

3
我正在尝试创建一个自定义弹出视图,可以从多个视图控制器中调用,但我遇到了一些麻烦。
只要我从viewController自身编写并调用"presentPopup"方法,它就能正常工作。而不是在每个VC中编写单独的方法,我更喜欢在一个单独的类中编写方法并传递参数以个性化设置。
然而,每当我尝试这样做时,我就会收到著名的“此类不符合键值编码规范”的错误信息。请问是否有人知道如何使该类符合键值编码规范?或者如何处理这个问题?谢谢!!
2个回答

3
在本答案的末尾有一个简单的解释,但我最近看到了一些类似的问题,所以我想提供一些背景知识。
错误信息还应该告诉您该类不符合哪个键的键值编码。您的问题表述方式暗示您认为可以添加一些通用代码使类“符合键值编码”。这并不是事实。
所有的cocoa/cocoa touch对象都能执行键值编码操作。KVC允许您使用valueForKey:setValue:forKey:来达到访问器方法,而不是直接使用访问器方法。
您看到的错误将类似于:
XXX - 此类不符合键 YYY 的键值编码。
XXX是所讨论的类,YYY是键。因此,在某个地方调用了[xxx setValue:something forKey:@"YYY"]
此时,您可能会想:“但是我从未在我的代码中使用过setValue:forKey!”您可能是正确的。但是当您加载xib文件时,框架确实会使用它——所有的输出都是使用键值编码设置的。
因此,您的xib中将有一个输出口,它连接到已经被删除或重命名的类中的内容。如果您很幸运,它将在旁边有一个小感叹号。如果您不幸,您甚至在界面生成器中看不到它,并且必须将其从XML中的源代码编辑xib并删除它。

非常正确。我发现这个链接帮助我完全实现了我想要做的事情:https://dev59.com/ZVXTa4cB1Zd3GeqP2Yai - Sean Danzeiser

0
你在某处调用了 setValue:forKey: 方法(可能是在 NSMutableDictionary 上),应该改为调用 setObject:forKey 方法或类似的方法。

我注意到如果我删除这些行:NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"PopupAlertView" owner:self options:nil]; PopupAlertView *popup = [topLevelObjects objectAtIndex:0]; 我就不再收到错误信息了。但是如何显示nib呢? - Sean Danzeiser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接