0

我在下面显示的 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

4 回答 4

1

尝试在 imageTapped 下替换以下行:

[_delegate didFinishChoosingImageAtIndex:bttn.tag];

if([_delegate respondsToSelector:@selector(didFinishChoosingImageAtIndex:)]){
    [_delegate didFinishChoosingImageAtIndex:bttn.tag];
}
于 2013-05-29T11:50:48.763 回答
0

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

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

或者

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

如果你想迭代所有的东西。

于 2013-05-29T13:01:32.217 回答
0

尝试打开NSZombie并查看是否过早释放某些内容。EXC_BAD_ACCESS 表示当您向其发送消息时某些内容已被释放。

于 2013-05-29T10:38:02.007 回答
-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;

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

于 2013-05-29T10:46:25.987 回答