【问题标题】:Why is my object not key value coding-compliant?为什么我的对象不符合键值编码?
【发布时间】:2012-07-15 12:37:04
【问题描述】:

尝试使用键值编码在我的对象上设置值:

[engine setValue:[NSNumber numberWithInt:horsePower]
          forKey:@"horsePower"];

导致错误:

[<Slant6 0x7fbc61c15c40> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key horsePower.

我需要做什么才能使engine 键值编码兼容?

【问题讨论】:

  • 现在我把水晶球丢在哪里了……
  • 除非您告诉我们您的引擎对象的类别,否则我们无能为力。
  • @ThorstenKarrer 虽然总的来说,对于新手来说发布他们的实际代码是一种很好的建议,但这里不需要
  • @H2CO3 取决于...例如,如果 OP 尝试在 NSDictionary 类的对象上调用 setValue:forKey:,则比添加 ivar 更好的解决方案是更改类到 NSMutableDictionary。此外,在这种情况下,问题将是重复的。
  • @H2CO3:不过可能会有很多问题。 engine 实际上可能与 horsePower 兼容 KVC,但内存管理问题可能会导致在错误对象上进行查找,等等。

标签: objective-c cocoa key-value-coding


【解决方案1】:

确保engine 所属的任何类实现horsePower 属性,和/或具有horsePower 实例变量,和/或手动实现setHorsePower:horsePower 方法。

您收到错误是因为您尝试设置horsePower 键的值,但engine 的类没有正确实现设置horsePower 键的方法。

【讨论】:

  • 没必要,看我的回答。
【解决方案2】:

有很多bunch of approaches 可以利用 KVC - 也许最简单的方法是在您的类中使用您要使用的键名的实例变量,即。 e.:

@interface Engine: NSObject {
    NSNumber *horsePower;
    // etc.
}

【讨论】:

  • 感谢您的帮助。这意味着很多
  • @FOCUSHUANG 没问题,我很乐意提供帮助。下次请确保您发布一些代码,这将极大地帮助其他人回答您的问题。
  • 您可能应该链接到 KVC 文档,该文档解释了使您的类符合 KVC 的所有方法。
  • 链接到 Apple KVC 文档:link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多