单击按钮时iOS App崩溃

时间:2013-05-29 10:27:10

标签: ios uiscrollview uibutton automatic-ref-counting

我在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。我不确定,我在这里缺少什么。请帮帮我

4 个答案:

答案 0 :(得分:1)

尝试替换imageTapped下的以下行:

[_delegate didFinishChoosingImageAtIndex:bttn.tag];

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

答案 1 :(得分:0)

尝试启用NSZombie并查看某些内容是否过早发布.EXC_BAD_ACCESS表示在您向其发送消息时已经取消分配了某些内容。

答案 2 :(得分:0)

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

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

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

如果你想迭代所有东西。

答案 3 :(得分:-1)

你应该在你的控制器中维护一组按钮,这样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;

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