类不符合键值编码的要求,无法为键“button”进行编码。

3

我是Objective-C的新手。我可以成功构建我的应用程序,但接着我遇到了以下错误:

由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[setValue:forUndefinedKey:]:该类不符合键值编码 key cardButton。'

我使用连接检查器检查了页面上的每个按钮,并没有看到任何警告。我可能添加了一个连接,然后错误地删除了它,所以它仍然存在于后台中,有没有办法看到所有的连接?我真的不确定。

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *cardButtons;


- (void)updateUI
{
    for (UIButton *cardButton in self.cardButtons) {
        int cardIndex = [self.cardButtons indexOfObject:cardButton];
        Card *card = [self.game cardAtIndex:cardIndex];
        [cardButton setTitle:[self titleForCard:card]
                    forState:UIControlStateNormal];
        [cardButton setBackgroundImage:[self backgroundImageForCard:card]
                              forState:UIControlStateNormal];
        cardButton.enabled = !card.isMatched;
    }
    self.scoreLabel.text = [NSString stringWithFormat:@"Score: %d", self.game.score];
}
2个回答

4

该类对于键值为 cardButton 的操作不兼容

因此,错误信息提到的键是 cardButton(没有字符 's'),但您的代码使用了属性 cardButtons。看起来您可能在某个地方拼写错误了,缺少了 's'。

我可能添加了一个连接然后又删除了它

如果您以前将名称 cardButton 用作属性名称,并且之后切换到集合,则很容易出现此错误。如果您在 .xib 或 storyboard 中留下了一个对象连接到该属性,则在加载该对象时 iOS 将尝试将该对象连接到属性 cardButton,导致正好获得您正在遇到的运行时错误 。您在 Xcode 中没有看到任何警告,因为问题不在您的代码中。因此,请检查您的 .xib 或 storyboard 文件,查找连接到 cardButton 属性的对象。


cardButtons和cardButton的拼写是正确的。cardButtons是数组,而cardButton是该数组中代表性的按钮。 - Kaveh Vejdani
@KavehVejdani 我看到了,但是根据错误信息可以清楚地看出,OP在某个地方试图使用cardButton键,而相关的类并不支持该键。发布的代码似乎不是问题所在,但错误可能出现在代码的其他位置,或者像我所建议的那样,可能是.xib或storyboard文件中的连接问题。 - Caleb
我同意。他的问题是:“有没有一种方法可以查看所有连接?” - Kaveh Vejdani

2
  1. 在你的Storyboard视图中,点击你的ViewController视图窗口底部的文件所有者按钮,在黑色控制栏内。

  2. 在屏幕右侧的对象检查器窗口中,单击连接检查器,即右上角的小向右箭头。在那里,您可以看到您正在寻找的所有连接。

enter image description here


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