Objective c 在代码中创建的UIButton工作不正常

Objective c 在代码中创建的UIButton工作不正常,objective-c,uibutton,Objective C,Uibutton,所以我一直在推迟问这个问题,因为我知道解决方案很可能非常简单。但我已经穷途末路了,因此: 我已经通过编程创建了一个UIButton并将其链接到一个方法,但它不起作用 .h定义 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface CreaterPage : UIViewController { IBOutlet UIView *postcardView; IBOutlet UIButto

所以我一直在推迟问这个问题,因为我知道解决方案很可能非常简单。但我已经穷途末路了,因此:

我已经通过编程创建了一个UIButton并将其链接到一个方法,但它不起作用

.h定义

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface CreaterPage : UIViewController
{
IBOutlet UIView *postcardView;
IBOutlet UIButton *returnButton;
}

-(void)goBack:(UIButton *)button;

@end
#import "CreaterPage.h"

@implementation CreaterPage

-(void)viewDidLoad
{
NSLog(@"Creater Page View Loaded Successfully");
UIButton *goHomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[goHomeButton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchDown];
[goHomeButton setTitle:@"Go Back" forState:UIControlStateNormal];
goHomeButton.frame = CGRectMake(100, 100, 100, 100);
[self.view addSubview:goHomeButton];
}

-(void)goBack:(UIButton *)button
{
NSLog(@"Home");
}

@end
基本上,当我运行代码时,按钮显示为定义的,但每当我按下按钮时,程序就会崩溃

在main.m文件中,它给出了错误

线程1:程序接收到信号:“EXC_坏访问”

在线

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
我尝试了各种各样的方法,只是转向以编程方式创建它,因为我无法通过界面生成器使它工作

所以我希望这里有人能改变我幼稚的方式,告诉我哪里出了问题:D

谢谢

马特


编辑1:将@selector(goBack)更改为@selector(goBack:)

我的第一个猜测是您的操作定义如下:

[goHomeButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchDown];
请注意,
@选择器(goBack)
在方法名称后面没有冒号。
.m
文件中的方法定义为:

-(void)goBack:(UIButton *)button
因此,我想象将您的操作更改为
@selector(goBack:)
会使事情变得更清楚

旁注:像您这样为
iAction
定义发送者的类型是非常少见的。虽然只要
UIButton
是导致调用方法的唯一的UI对象,您可能不会遇到任何问题,但这是一种非常糟糕的做法。您应该将方法签名更改为:

-(IBAction)goBack:(id)sender
另请注意使用
iAction
代替
void
。虽然它们在语法上是相同的,但iAction向读者和界面生成器明确了哪些方法可用于链接。

更改

[goHomeButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchDown];


我承认,当我看到你的回答时,我以为你把它钉在了头上,但不幸的是没有!!按照您的建议,将我的操作更改为@selector(goBack:),但我得到了完全相同的问题@MatthewHallatt看到了我关于方法签名的另一点。也许这会有帮助?再说一次,我已经做了你建议的改变,但仍然没有运气!!只是一直给我同样的错误:/Matt@MatthewHallatt你可能想打开NSZombies(谷歌会告诉你怎么做),因为我想象你的代码中有一个内存管理问题。非常感谢你迄今为止的帮助!!真的很感激!!:D:只需将“@selector(goBack:)”替换为“@selector(goBack:)”,谢谢您的快速回复,但我已经尝试过了,没有运气!!:马特已经改变了这一点(见下面的答案),我担心这没有帮助!谢谢你的回答和快速回复!!:D马特
[goHomeButton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchDown];