按钮单击时 iOS 应用程序崩溃

Posted

技术标签:

【中文标题】按钮单击时 iOS 应用程序崩溃【英文标题】:iOS App crash on button click 【发布时间】:2013-05-29 10:27:09 【问题描述】:

我正在 for 循环中创建按钮,下面显示的是该代码

 for(int i=1;i<[_imageDetailsEntities count];i++)

    UIButton *bttn=[UIButton buttonWithType:UIButtonTypeCustom];
    bttn.frame=CGRectMake(x,y,75,75);
    [_scrollView addSubview:bttn];
    ImageDetails *imageDetails=[_imageDetailsEntities objectAtIndex:i];
    UIImage *image= [self imageFromPath:imageDetails.imagePath];
    [bttn setImage:image forState:UIControlStateNormal];
    bttn.tag=i-1;
    [bttn addTarget:self action:@selector(imageTapped:) forControlEvents:UIControlEventTouchUpInside];
    x=bttn.frame.origin.x+bttn.frame.size.width+distanceBetweenButtons;
    if(i%3==0)
    
        x=29;
        y=y+bttn.frame.size.height+20;
    


[_scrollView setContentSize:CGSizeMake(320,y+95)];


-(void)imageTapped:(id)sender

    UIButton *bttn=(UIButton*)sender;
    [_delegate didFinishChoosingImageAtIndex:bttn.tag];

 

当我点击按钮时,应用程序崩溃并显示 EXC_Bad 访问消息。我正在使用 ARC。我不确定,我在这里缺少什么。请帮助我

【问题讨论】:

你检查 _delegate 。是零吗? @bit-whacker 这不是问题所在。如果他以编程方式添加事件,他可以使用 void。 @Nishnat Tyagi 我什至通过评论那行代码来检查。但仍然崩溃 你的 imageTapped: 方法调用了吗? 不,它没有被调用。我通过保留断点来检查 【参考方案1】:

尝试替换 imageTapped 下的以下行:

[_delegate didFinishChoosingImageAtIndex:bttn.tag];

if([_delegate respondsToSelector:@selector(didFinishChoosingImageAtIndex:)])
    [_delegate didFinishChoosingImageAtIndex:bttn.tag];

【讨论】:

【参考方案2】:

尝试打开NSZombie,看看是否有一些东西被释放得太早。EXC_BAD_ACCESS 意味着当你发送消息时,一些东西已经被释放了。

【讨论】:

【参考方案3】:

不知道你的代码到底做了什么,但看起来你的 for 循环有一个一次性错误。 要么使用

    for(int i=0;i<[_imageDetailsEntities count];i++)

    for(int i=1;i<=[_imageDetailsEntities count];i++)

如果你想遍历所有的东西。

【讨论】:

【参考方案4】:

您应该在控制器中维护一组按钮,因此 ARC 不会释放它们。

在您的界面中:

@property (nonatomic, strong) NSMutableArray *buttons;

您的代码:

NSMutableArray *buttons = [NSMutableArray array];

for(int i=1;i<[_imageDetailsEntities count];i++)

   ...your code
   [buttons addObject:bttn];


self.buttons = buttons;

如果需要,您可以再次使用该数组从视图中删除按钮。

【讨论】:

如果将它们添加到视图中,它们不会被释放,因为将它们分配给视图会增加保留计数。

以上是关于按钮单击时 iOS 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UIPrintInteractionController 仅在 iOS 14 上单击“取消”按钮时崩溃

RestKit iOS 应用程序应请求崩溃

在 swift 3 上的按钮单击应用程序是与故事板绑定的崩溃

android应用程序在按钮单击时崩溃

QPrinter 单击按钮时我的程序崩溃为啥?

单击预测按钮时,应用程序崩溃