我试图将UILabel与在类中创建的IBOutlet链接起来。

我的应用程序崩溃与以下错误。

这是什么意思?

我该怎么解决呢?

***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'


当前回答

就我而言,

[[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]

这就是原因。

将此替换为initWithNibName,已解决。

其他回答

你的xib可能连接不好。

这个错误我犯过很多次了。虽然TechZen的答案在这种情况下是绝对正确的,但另一个常见的原因是当您更改.h/中的IBOutlet属性的名称时。m,你已经连接到文件的所有者在nib。

从你的笔尖:

在IB中选择对象,然后转到“连接检查器”。 在“引用Outlets”下,确保你的对象没有仍然连接到旧的属性名…如果是,单击小的“x”删除引用并重新构建。

另一个常见的原因是,如果你使用Storyboard,你的UIButton可能有多个赋值(解决方案几乎与nib相同):

打开你的故事板,右击UIButton 您将看到该按钮有多个assign/ref。 删除一个带有小“x”的灰色“Main…”窗口:

还有其他问题,你可以在其他答案中看到。 我为自己创建这个错误的方式是,我从头开始一个项目,首先删除故事板的初始场景,然后将另一个项目的场景粘贴到我的故事板中。

那样做没有问题。你只需要在你的故事板中添加一个入口点,也就是检查你喜欢的任何视图控制器上的初始视图控制器。否则它将是一个灰色的场景,并向您抛出一个错误。

对于连接属性中的所有UI元素,检查outlet及其对应的头文件。h中的属性。 在.h文件中可能缺少一个或多个属性条目。

我也有这个问题,这是由于重命名一个视图通过创建一个新的出口。你可能在故事板中有旧的连接出口。

您需要做的是从故事板中删除旧的出口。

转到故事板。 点击“Show Code Review”按钮(上面有<- ->符号的按钮,就在Show /hide导航器的左边)。 搜索“connections”标签。 在“connections”标签中寻找“outlet”标签,并将“property”属性设置为您在Exception中获得的名称。 去掉那个出口标签。 点击“Command + B”,享受吧!

导致这种情况的另一个原因是,您声明该属性实现为@dynamic,但类无法在父类中找到它。