我试图将UILabel与在类中创建的IBOutlet链接起来。
我的应用程序崩溃与以下错误。
这是什么意思?
我该怎么解决呢?
***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'
我试图将UILabel与在类中创建的IBOutlet链接起来。
我的应用程序崩溃与以下错误。
这是什么意思?
我该怎么解决呢?
***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'
当前回答
通常当这种情况发生在我身上时,@TechZen的回答很管用。然而,昨天我花了很长时间处理故事板连接,却发现问题出在我的代码上。
我有一个自定义视图控制器来处理故事板中的各种布局,但其中一个布局需要一个其他布局不使用的特殊标签。所以我创建了一个子类,像这样:
@interface MyViewControllerSubclass : MyViewController
然后我在MyViewControllerSubclass.m中添加了一个私有属性:
@interface MyViewController ()
@property (weak, nonatomic) IBOutlet UILabel *crashesApp;
@end
Xcode很高兴地允许我连接这个IBOutlet,但每次视图加载时,应用程序都会崩溃,因为旧的“不key-value兼容键'chrashesApp'”。
解决方案,回顾起来是半明显的,就是改变私有类别以使用正确的名称,即子类的名称:
@interface MyViewControllerSubclass ()
@property (weak, nonatomic) IBOutlet UILabel *noMoreCrashing;
@end
其他回答
在我的例子中,它是一个IBOutlet在ViewController中的属性名。m被改变了,但是Storyboard中的那个没有改变。在ViewController中重新引入IBOutlet。M每ctrl拖动解决了这个问题。我还注意到在XCode中找到这种“孤立”iboutlet的方法:(请看图片)那些不是“孤立”的iboutlet有同心圆而不是行号。
就我而言,
[[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]
这就是原因。
将此替换为initWithNibName,已解决。
当一个UI标签或其他UI元素被视图控制器类中的两个变量引用,而我删除了其中一个变量时,我也会遇到这种情况。
这种情况只发生在我在设备(iPhone)上调试时。iOS模拟器运行正常。用Xcode做一个“Product->Clean”似乎解决了这个问题,但我不知道为什么。
这可能意味着您试图使用开头没有设计的排序描述符。如:
黑array valueForKeyPath: @“distinctUnionOfObjects.self铝”
实际上一定是:
(数组valueForKeyPath: @“@distinctUnionOfObjects.self”)