ios5 - 单击按钮时出现“EXC_BAD_ACCESS”

时间:2012-06-28 10:42:10

标签: objective-c ios button exc-bad-access

我是Objective C的初学者。

目前我尝试在主窗口中显示视图。该视图包含一个按钮。出于某种原因,单击此按钮xcode会引发错误。

希望你能帮助我理解我做错了什么。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    BtnView *btn = [[BtnView alloc] init];
    [self.window addSubview:btn.view];        
    [self.window makeKeyAndVisible];

    return YES;
}

我的按钮视图的viewController有一个用于识别触摸事件的动作 h文件:

- (IBAction)touched:(id)sender;

并在m文件中

- (IBAction)touched:(id)sender {
    //actions ...
}

通过触摸按钮,我收到以下错误:

enter image description here 怎么了?

m file:

enter image description here

h文件: enter image description here

4 个答案:

答案 0 :(得分:3)

我假设你为这个项目启用了ARC。

当您从didFinishLaunchingWithOptions:返回时,将释放分配给btn的对象,因为您将其分配给仅在该方法中定义的局部变量。使BtnView *btn成为您班级的strong属性,它应该留在处理按钮按下。 (请记住在引用它时使用self.btn。)

(但是,我很好奇,为什么不首先将按钮放在主视图上,然后再担心额外的控制器和子视图?)

答案 1 :(得分:0)

- (IBAction)touched

尝试不使用发件人

答案 2 :(得分:0)

在.xib文件中,您可以将按钮连接到文件的所有者。

1)右键单击按钮。然后会出现一个窗口。您可以在该窗口中看到Touch Up Inside,然后点击小圆圈并拖动到文件的所有者并连接到touched。我认为这会对你有所帮助。

答案 3 :(得分:0)

你有什么特别的理由要求整个UIViewController成为一个按钮吗?执行此操作的传统方法是将UIViewController作为控制器,而不是将UIButton作为子视图放在viewDidLoad方法的视图中,将其连接到所需的方法,如果需要,甚至可以将其放在整个屏幕上。如果您需要自定义外观,也可以使用UIButton进行自定义。

相关问题