2012-09-25 2 views
5

возникли проблемы с этим с iOS 6. Я не могу понять, что изменилось, что вызовет такое поведение. Это работало отлично в 5. Теперь индикатор активности не появляется своевременно или вообще. Любая помощь приветствуется.Проблемы с iOS 6 и UIActivityIndicator в 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

Проблема может быть не в самом методе индикатора активности, но, возможно, что бы это ни называло. Вы пробовали регистрировать свой метод ИИ, чтобы убедиться, что он надежно называется? – DenVog

ответ

0

Похоже, что myMethod вызывается из фоновой нити. Как правило, все взаимодействия с элементами UIKit (включая UIActivityIndicatorView) всегда должны выполняться в основном потоке. Попробуйте использовать GCD, чтобы переместить код пользовательского интерфейса в основную очередь (основной поток a.k.a.).

-(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 
} 
Смежные вопросы