我有一个视图控制器开始太大,所以我决定将所有按钮功能移动到一个单独的扩展。
//MyViewController.h
@interface MyViewController : UIViewController
@end
//MyViewController+Buttons.h
@interface MyViewController (Buttons)
- (void)adjustButtons;
@end
//MyViewController+Buttons.m
@interface MyViewController ()
{
}
@property (weak, nonatomic) IBOutlet UIButton *myButton;
@end
@implementation MyViewController(Buttons)
@end
界面构建器允许我将按钮绑定到插座,但是当我运行应用程序时,我收到以下异常:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MyViewController 0x12e501a70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key myButton
我知道应该可以在视图控制器的扩展中定义出口。我做错了什么?
答案 0 :(得分:1)
您正在声明界面,但您未提供实施。 (如果将IBOutlet更改为ivar而不是属性,则会出现链接器错误而不是运行时错误。)
为了自动合成属性和ivar,需要从其编译单元(通常是&#34; MyViewController.m&#34;)中看到它的声明。
在您的情况下,将@interface MyViewController()
声明移至&#34; MyViewController + Buttons.h&#34;,然后将该标头导入&#34; MyViewController.m&#34;