【问题标题】:Showing a UIView subclass - this class is not key value coding-compliant for the key显示 UIView 子类 - 此类与键的键值编码不兼容
【发布时间】:2012-06-23 03:04:10
【问题描述】:

我正在尝试创建一个可以从多个视图控制器调用的自定义弹出视图,但我遇到了一些麻烦。

只要我从 viewController 本身编写和调用“presentPopup”方法,我就能让它正常工作。与其在每个 VC 中编写一个单独的方法,我更愿意在一个单独的类中编写一个方法并传递参数来个性化它。

无论如何,每当我尝试这样做时,我都会不断收到著名的“此类与键的键值编码不兼容”错误。只是想知道是否有人对如何使类键值编码兼容有任何见解?或者一般如何解决这个问题?谢谢!!

【问题讨论】:

    标签: ios uiview


    【解决方案1】:

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

    该错误还应该告诉您哪个该类不符合键值编码的键。您问题的措辞表明您认为可以添加一些通用代码以使类“符合键值编码”。事实并非如此。

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

    您看到的错误大致如下:

    XXX - 此类不符合键 YYY 的键值编码。

    XXX 是有问题的类,YYY 是关键。所以在某个地方,正在调用[xxx setValue:something forKey:@"YYY"]

    此时,您在想“但我从未在我的代码中使用过setValue:forKey!”。你可能是对的。但是当您加载 xib 文件时,框架会使用它 - 所有的出口都是使用键值编码设置的。

    因此,您的 xib 中将有一个出口,该出口连接到已在其链接的类中删除或重命名的内容。如果幸运的话,它旁边会有一个小感叹号。如果不是,您甚至不会在界面生成器中看到它,您必须将 xib 作为源代码进行编辑并将其从 XML 中删除。

    【讨论】:

    【解决方案2】:

    您正在某处调用 setValue:forKey: 方法(可能在您应该调用 setObject:forKeyNSMutableDictionary 上)或类似的东西...

    【讨论】:

    • 我注意到如果我删除这些行: NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"PopupAlertView" owner:self options:nil]; PopupAlertView *popup = [topLevelObjects objectAtIndex:0];我不再得到错误。但是如何显示笔尖呢?
    猜你喜欢
    • 2017-09-27
    • 2015-08-27
    • 2011-03-17
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多