2013-12-09 3 views
0

Мой код работает отлично, когда я называю reloadData метод каждый второй, он удаляет вид (если есть вид) и добавьте подвид. Проблема в том, что нет subView Я получаю сообщение 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

Он работает, когда я ставлю весь метод меток 'lbl1' с' SELF'. Спасибо, что работает сейчас. –

0

Вы можете проверить, как это в этом состоянии

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

попытка удалить autorelease и сделать что-то вроде

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

перед тем lbl1 = [[[UILabel alloc] initWithFrame...

+0

Спасибо. но это не работает. Я получаю EXC_BAD_ACCESS (код = 1, адрес = 0x2e777783) –

+0

Он работает, когда я помещаю себя в каждый 'lbl1'. Благодарю. –

1

Вы также можете проверить, если метка имеет право SuperView

if (lbl1 && lbl1.superview == self) { // then lbl1 is already a subview of self 
    [lbl1 removeFromSuperview]; 
} 
Смежные вопросы