2013-12-09 45 views
0

我的代码工作正常,当我打电话reloadData方法每一秒,它消除了视图(当有视图),并添加子视图。问题是当没有子视图我得到exc_bad_access问题,在[self.lbl1 removeFromSuperview]函数上显示。removeFromSuperview当没有addSubView问题

我的代码

-(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]; 
} 

请在那里将是我的问题?

回答

1

难道还有代码中的条件时,如果环(result1 < result2 && al == YES)是第一个被称为前二号?

在这种情况下,lbl1不会被添加到视图或不被分配,因此不能被删除。

您需要检查是否存在lbl1,只有将其从超级视图中移除。

if(self.lbl1) [self.lbl1 removeFromSuperView]; 
+0

它的工作原理,当我把所有带'SELF'的'lbl1'标签方法。感谢它现在的作品。 –

0

您可以检查像这样在这种情况下

else if (result1 < result2 && al == YES) 
{ 
    for(UIView *view in self.view.subviews) 
    { 
     if ([view isKindOfClass:[UILabel class]]) 
     { 
      [self.lbl1 removeFromSuperview]; 
     } 
    } 
} 
0

尝试删除自动释放,使类似

if (lbl1) { 
     [lbl1 removeFromSuperview]; 
     [lbl1 release];   
    } 

lbl1 = [[[UILabel alloc] initWithFrame...

+0

谢谢。但它不起作用我得到EXC_BAD_ACCESS(代码= 1,地址= 0x2e777783) –

+0

当我把自己放到每个'lbl1'上时,它都有效。谢谢。 –

1

您还可以检查标签有权上海华

if (lbl1 && lbl1.superview == self) { // then lbl1 is already a subview of self 
    [lbl1 removeFromSuperview]; 
} 
相关问题