我在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。我不确定,我在这里缺少什么。请帮帮我
答案 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;
如果需要,您可以再次使用该数组从视图中删除按钮。