Objective c ios5-“;EXC“不良访问”;单击按钮时

Objective c ios5-“;EXC“不良访问”;单击按钮时,objective-c,ios,button,exc-bad-access,Objective C,Ios,Button,Exc Bad Access,我对目标C完全是个初学者 目前,我尝试在主窗口中显示视图。此视图包含一个按钮。出于某种原因,单击此按钮xcode会抛出错误 希望你能帮助我理解我做错了什么 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen m

我对目标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文件:

在m文件中

- (IBAction)touched:(id)sender {
    //actions ...
}
通过触摸按钮,我得到以下错误:

怎么了

m文件:

h文件:


在.xib文件中尝试不使用sender,您可以将按钮连接到文件的所有者


1) 右击按钮。然后会出现一个窗口。您可以在该窗口中看到
触摸内部
,然后单击小圆圈并拖动到文件的所有者,然后连接到
触摸的
。我想这会对你有帮助。

我想你已经为这个项目启用了ARC

当您从
didfishlaunchingwithoptions:
返回时,分配给
btn
的对象将被释放,因为您将其分配给仅在该方法中定义的局部变量。将
BtnView*btn
a
strong
属性设置为类的属性,它应该保留以处理按键操作。(请记住在引用它时使用
self.btn
。)


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

是否有任何具体原因需要将整个UIViewController作为一个按钮?实现这一点的传统方法是将UIViewController作为控制器,然后在viewDidLoad方法中将UIButton作为其视图的子视图,将其连接到所需的方法,甚至在需要时在整个屏幕上使用它。如果您需要自定义外观,您也可以使用UIButton进行自定义。

您也可以为BtnView类添加代码吗?从您的BtnView.m和BtnView.hhe发布代码我正在尝试。。。这里的编辑有点难以理解handle@mogio如何添加按钮?我是说,你按的实际按钮。如何创建它?我将它拖到xib的视图上。从对象库。您是如何以编程方式创建按钮或将按钮拖动到.xib的?您是否按照我编写的方式连接?请查看。。。这文件真小。。没有自定义代码,谢谢你,菲利普!。。。当然我没有想到这一点。但你是对的。。。也许我最好不用ARC。。。我猜有数百种可能出现这种问题的情况。因为我试图了解整个viewController的事情。。。从那以后。无论如何,我都会将代码与视图分开。。。由于这是我在其他语言中学习的mvc方式,视图控制器的常见模式是,它们成为控制器层次结构的一部分,在使用时保留它们(推送、模态、容器…),并且所有这些都可以与ARC一起正常工作。使用控制器的视图而不实际使控制器成为该链的一部分与它们的预期用途有点不同,因此需要不同的处理才能工作。我肯定会更多地研究ARC的正确使用。一个朋友的真诚意味着这是一个很好的编程方式,但我应该先学习旧的干净方式,这样我就知道更多幕后的事情了。哦,菲利普,关于ARC的一个问题。我假设在某些情况下,您必须动态创建UI元素,而这些元素不能像动态创建那样定义为强属性。创建某种类型的数组的强属性来保存引用以确保不会被ARC机制删除,这有意义吗?这只是一个学习项目。我需要了解如何加载视图、窗口等。目前我还不清楚窗口和视图之间的区别。我真的在一开始
- (IBAction)touched:(id)sender {
    //actions ...
}
- (IBAction)touched