0

Я использую UIAlertview и внутри этого одного индикатора активности в viewdidload(). Но я попытался удалить его из супервизора после задержки, но после удаления UIAlertview с использованием следующего кода я не могу ничего делать в app.Is как новый прозрачный слой все еще работает над моим представлением.UIAlertview не закрывается должным образом?

КОД

-(void)startAlertActivity 
    { 
     _alertView = [[UIAlertView alloc] initWithTitle:@"Loading " 
               message:@"\n" 
               delegate:self 
             cancelButtonTitle:nil 
             otherButtonTitles:nil]; 

     spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 

     spinner.center = CGPointMake(139.5, 75.5); // .5 so it doesn't blur 
     [_alertView addSubview:spinner]; 

     [spinner startAnimating]; 
     [_alertView show]; 
     [_alertView performSelector:@selector(stopAlertActivity) withObject:self afterDelay:5.0]; 


    } 

    -(void)stopAlertActivity 
    { [spinner stopAnimating]; 
     [_alertView dismissWithClickedButtonIndex:0 animated:YES]; 
    } 

ITS выглядеть как прозрачный слой все еще работает на экране, как я могу закрыть это?

пример изображения .... enter image description here

для меня, что тревога не в экране сейчас, но фон есть в светло-голубой цвет

CRASH ОТЧЕТ

[UIAlertView stopAlertActivity]: unrecognized selector sent to instance 0x9ab5eb0 
2013-08-02 12:20:43.822 AssamKart[5719:12203] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIAlertView stopAlertActivity]: unrecognized selector sent to instance 0x9ab5eb0' 
*** First throw call stack: 
+0

вы используете какой-либо контроль третьей стороны? –

+0

nop.iam, используя только alertview и индикатор – Navi

+0

Проблема с '[_alertView performSelector: @selector (stopAlertActivity) withObject: self afterDelay: 5.0]; 'change that to:' [self performSelector: @selector (stopAlertActivity) withObject: self afterDelay: 5.0]; ' –

ответ

1

вы должны действительно использовать dispatch_after

_alertView = [[UIAlertView alloc] initWithTitle:@"Loading " 
             message:@"\n" 
             delegate:self 
           cancelButtonTitle:nil 
           otherButtonTitles:nil]; 

spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 

spinner.center = CGPointMake(139.5, 75.5); // .5 so it doesn't blur 
[_alertView addSubview:spinner]; 

[spinner startAnimating]; 
[_alertView show]; 



double delayInSeconds = 5.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [spinner stopAnimating]; 
    [_alertView dismissWithClickedButtonIndex:0 animated:YES]; 
}); 
+0

его работа отлично спасибо – Navi

0

Вы не можете уволить alertView повторно перемещая его из своего супервизора. Вместо этого вы должны позвонить dismissWithClickedButtonIndex:animated:. Это единственный способ отклонить его правильно, см. docs.
В вашем случае я бы определил метод с аргументом alertView как аргумент, который выполняет dismissWithClickedButtonIndex:animated: и выполняет этот метод после задержки.

+0

, пожалуйста, проверьте обновленный вопрос с сообщением об аварии – Navi

0

Вы должны отклонить вид предупреждения, а не удалить из супервизора, потому что он прикреплен к полупрозрачному фону. Позвоните по телефону stopAlertActivity после задержки.

+0

, но я попытался вызвать другой метод с задержкой 5.0 и внутри этого нового метода iam, пытающегося уволить в это время его сбой – Navi

+0

Вы должны позвонить не на alerview, а на себя. метод, который вам нужно вызвать, не объявлен в UIAlertView, но в классе si diplaying он – Andrea

+0

, пожалуйста, проверьте обновленный вопрос с сообщением о сбоях. – Navi

1

Вы должны изменить эту строку:

[_alertView performSelector:@selector(stopAlertActivity) withObject:self afterDelay:5.0]; 

к:

[self performSelector:@selector(stopAlertActivity) withObject:nil afterDelay:5.0]; 

stopAlertActivity метод представляет собой метод self, не бдительный взгляд. И вы не можете передать объект в селектор, потому что stopAlertActivity не принимает никаких параметров.

+0

Я пробовал, что тоже то же сообщение о сбое – Navi

+0

Этого не может быть. Вы изменили '_alertView' на' self', как я? – rmaddy

+0

есть я сделал ...... – Navi