2012-09-25 12 views
5

)は、iOS 6以降これに問題がありました。この動作の原因となったものを実際に変更することはできません。これは完全に5で動作するために使用されました。これで、アクティビティインジケータがタイムリーに表示されないか、まったく表示されません。どんな助けでも大歓迎です。iOS 6とUIActivityIndi​​catorの問題(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

この問題は、アクティビティインジケータのメソッドそのものではなく、それを呼び出すものである可能性があります。 AIメソッドをログに記録して確実に呼び出されていることを確認しましたか? – DenVog

答えて

0

myMethodがバックグラウンドスレッドから呼び出されているようです。一般的なルールとして、UIKit要素(UIActivityIndicatorViewを含む)とのすべてのやりとりは、常にメインスレッド上で行う必要があります。 GCDを使用してUIコードをメインキュー(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 
} 
関連する問題