在扩展中定义IBOutlet属性

时间:2014-07-03 17:03:54

标签: ios xcode cocoa ios7 interface-builder

我有一个视图控制器开始太大,所以我决定将所有按钮功能移动到一个单独的扩展。

//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

我知道应该可以在视图控制器的扩展中定义出口。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在声明界面,但您未提供实施。 (如果将IBOutlet更改为ivar而不是属性,则会出现链接器错误而不是运行时错误。)

为了自动合成属性和ivar,需要从其编译单元(通常是&#34; MyViewController.m&#34;)中看到它的声明。

在您的情况下,将@interface MyViewController()声明移至&#34; MyViewController + Buttons.h&#34;,然后将该标头导入&#34; MyViewController.m&#34;