2012-09-25 12 views
5

ha tenido problemas con esto desde iOS 6. Realmente no puedo averiguar qué ha cambiado que podría causar este comportamiento. Esto solía funcionar perfectamente en 5. Ahora el indicador de actividad no aparece ni puntualmente ni en absoluto. Cualquier ayuda sería muy apreciada.Problemas con iOS 6 y UIActivityIndicator en un título UINavigationBarVer

-(void)myMethod 
{ 
    UIView *currentTitleView = [[self navigationItem] titleView]; 


    // Create an activity indicator and start it spinning in the nav bar 
    UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc]  initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 

    [[self navigationItem] setTitleView:aiview]; 
    [aiview startAnimating]; 

    // Start of Block code 
    void (^block)(arg1, arg2) = 
    ^(arg1, arg2) 
    { 
     block code; 
     [aiview stopAnimating]; 
     [[self navigationItem] setTitleView:currentTitleView]; 
    }; 
// End of Block code 




} 
+1

El problema puede no ser con el método del indicador de actividad en sí mismo, pero tal vez lo llame. ¿Has intentado iniciar sesión en tu método de AI para asegurarte de que se te llame de manera confiable? – DenVog

Respuesta

0

suena como myMethod se está llamando desde un subproceso en segundo plano. Como regla general, todas las interacciones con los elementos de UIKit (que incluye UIActivityIndicatorView) siempre deben realizarse en el hilo principal. Intente usar GCD para mover el código de UI a la cola principal (a.k.a. hilo principal).

-(void)myMethod { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     UIView *currentTitleView = [[self navigationItem] titleView]; 

     // Create an activity indicator and start it spinning in the nav bar 
     UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc]  initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 

     [[self navigationItem] setTitleView:aiview]; 
     [aiview startAnimating]; 
    }); 

    // Start of Block code 
    void (^block)(arg1, arg2) = 
    ^(arg1, arg2) 
    { 
     block code; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [aiview stopAnimating]; 
      [[self navigationItem] setTitleView:currentTitleView]; 
     }); 
    }; 
// End of Block code 
} 
Cuestiones relacionadas