没有addSubView问题时removeFromSuperview

时间:2013-12-09 10:16:41

标签: ios addsubview

当我每秒调用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];
}

请问我的问题在哪里?

4 个答案:

答案 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...