2012-09-25 5 views
5

hatte seit iOS 6 Probleme damit. Ich kann nicht wirklich herausfinden, was geändert wurde, das dieses Verhalten verursachen würde. Früher funktionierte das perfekt in 5. Jetzt kommt der Aktivitätsindikator nicht rechtzeitig oder gar nicht mehr. Jede Hilfe würde sehr geschätzt werden.Probleme mit iOS 6 und UIActivityIndicator in einer UINavigationBar titleView

-(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

Das Problem möglicherweise nicht mit der Aktivitätsanzeige Methode selbst, aber vielleicht was auch immer es ruft. Hast du versucht, deine KI-Methode zu protokollieren, um sicherzustellen, dass sie zuverlässig aufgerufen wird? – DenVog

Antwort

0

Es klingt wie myMethod wird von einem Hintergrund-Thread aufgerufen. In der Regel sollten alle Interaktionen mit UIKit-Elementen (einschließlich UIActivityIndicatorView) immer im Hauptthread ausgeführt werden. Versuchen Sie es mit GCD, um den UI-Code in die Hauptwarteschlange zu verschieben (a.k.a. main thread).

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