当我每秒调用reloadData
方法时,我的代码工作正常,它会删除视图(当有视图时)并添加子视图。问题是当没有子视图时,我会在exc_bad_access
函数上显示[self.lbl1 removeFromSuperview]
问题。
我的代码
-(void)reloadData
if (result1 > result2 && al == YES)
{
lbl1 = [[[UILabel alloc] initWithFrame:CGRectMake(320, 530, 550, 200)] autorelease];
lbl1.userInteractionEnabled = NO;
lbl1.text = @"WARNING";
lbl1.tag = 30;
lbl1.font = [UIFont fontWithName:@"Helvetica" size:18.0];
lbl1.textColor = [UIColor redColor];
lbl1.backgroundColor = [UIColor clearColor];
lbl1.lineBreakMode = NSLineBreakByWordWrapping;
lbl1.numberOfLines = 2;
[self addSubview:lbl1];
}
else if (result1 < result2 && al == YES){
[self.lbl1 removeFromSuperview];
}
请问我的问题在哪里?
答案 0 :(得分:1)
在第一个if循环(result1 < result2 && al == YES
)被调用之前,代码中是否存在条件?
在这种情况下,lbl1
不会在视图上添加或不被分配,因此无法删除。
您需要检查是否存在lbl1,然后才将其从超级视图中删除。
if(self.lbl1) [self.lbl1 removeFromSuperView];
答案 1 :(得分:1)
您还可以检查标签是否具有正确的超级视图
if (lbl1 && lbl1.superview == self) { // then lbl1 is already a subview of self
[lbl1 removeFromSuperview];
}
答案 2 :(得分:0)
您可以在此条件下进行检查
else if (result1 < result2 && al == YES)
{
for(UIView *view in self.view.subviews)
{
if ([view isKindOfClass:[UILabel class]])
{
[self.lbl1 removeFromSuperview];
}
}
}
答案 3 :(得分:0)
尝试删除自动释放并制作类似
的内容 if (lbl1) {
[lbl1 removeFromSuperview];
[lbl1 release];
}
之前lbl1 = [[[UILabel alloc] initWithFrame...