2011-01-03 27 views
4

スピナーを使いたいです。しかし、以下のコードでは スピナーは表示されません。理由はわかりません。この仕事をするには?私が作成した送信ボタンから呼び出されたのは です。スピナーを表示できません

//spinner declared in .h file 
UIActivityIndicatorView *aSpinner; 

//throw up spinner from submit btn we created 
aSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: 
    UIActivityIndicatorViewStyleWhiteLarge]; 

[self.view addSubview:aSpinner]; 
[aSpinner release]; 
[aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous]; 

//get rid of spinner when finished delegate is fired 
- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    NSLog(@"REQUEST FINISHED"); 
    [aSpinner stopAnimating]; 
    //[aSpinner release]; 
} 

答えて

14

スピナーを表示した直後にブロッキングコードを呼び出すと、メインループが実行されているときにのみ更新されるため、UIは更新されません。これが実際に問題の原因になっている場合は、[request startSynchronous]行をコメントアウトするとスピナーが表示されるはずです。

解決策は、非同期要求を使用することです。委任コードはあなたがすでにそれをしているように見えますが、一方、開始呼び出しは同期操作を示しています。説明するケア? (または私は何か見落としましたか?)

3
//spinner declared in .h file 
UIActivityIndicatorView *aSpinner; 

としてウェルヘッダファイル内のプロパティを追加します。

@property (nonatomic, retain) UIActivityIndicatorView *aSpinner; 

は.Mファイルに合成することを忘れないでください!

//throw up spinner from submit btn we created 
UIActivityIndicatorView *tempSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
self.aSpinner = tempSpinner; 
[tempSpinner release]; 

[self.view addSubview:self.aSpinner]; 
[self.aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous]; 


//get rid of spinner when finished delegate is fire 
- (void)requestFinished:(ASIHTTPRequest *)request { 
     NSLog(@"REQUEST FINISHED"); 
     [self.aSpinner stopAnimating]; 
} 

あなたのdeallocメソッドでは、次のように記述します。[aSpinner release];しかし、これは多くのアプローチのほんの1つです。

+0

スピナーは 'addSubview'呼び出しで保持する必要があります。これは私にとって問題のソースのようには見えません。 – zoul

+0

それは本当です、私は答えを編集します。 – LuckyLuke

0

問題は、スピナーを追加しているという見解の中にある可能性があります。それは可能であり、アクティビティインジケータを表示するためのディメンションを持っていますか? (例:UIBarButtonItemsはaddSubviewを処理できません)

関連する問題