2011-01-13 8 views
0

メソッドでは、UIActivityIndi​​catorViewを開始して開始します。 を使用してNSXMLParserを使用して、XMLからノード情報を取得します。 解析が終了したら、UIActivityIndi​​catorViewを停止します。 私はXMLを解析するときにUIActivityIndi​​catorViewを表示することを提案しますが、機能しません。 アイデアありがとう。同期プロセスでUIActivityIndi​​catorViewに関する解決策はありますか?

- (void)buttonAction 
{ 
    [activityIndicator startAnimating]; 
    [self performSelector:@selector(doWork) withObject:nil afterDelay:0.0]; 
} 

- (void)doWork 
{ 
    //Do your xml parsing here... 
} 

これは、UIには、メインスレッドをブロックする前に実行ループに制御を返すことによって更新する機会を与えてくれます:

- (void)ButtonTouch{ 

[activityIndicator startAnimating]; 
    /*get the login result*/ 
    loginXMLDealer *loginxmldealer = [[loginXMLDealer alloc] init]; 
    loginxmldealer.username = usernameField.text; 
    loginxmldealer.password = passwordField.text; 
    [loginxmldealer loginResult]; 
    [activityIndicator stopAnimating]; 
    if ([loginxmldealer.rspCode isEqualToString: @"0001"]) { 

     UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please check your passport." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [errorAlert show]; 
     [errorAlert release]; 
    } 
    else { 
     [self presentModalViewController:self.dataMainController animated:YES]; 

    } 
    [loginxmldealer release]; 
} 
+0

あなたがすでに持っているコードを私たちに教えてください。それから、あなたが何をする/変更/追加/削除する必要があるかを理解する手助けをすることができます。 –

+0

ok.私は既に自分の質問を編集しています。ありがとうございます。 – Solskjaer

答えて

1

あなたはこのような何かを行うことができます。あなたのタスクによっては、代わりにバックグラウンドスレッドやGrand Central Dispatchを使用して、残りのUIがブロックされないようにして、ユーザーにプロセスをキャンセルするオプションを与えることができます(これは不可能です上記の単純なアプローチ)。

+0

アニメーションを機能させるには、バックグラウンドスレッドまたはGCDで処理する必要があります。このコードは表示されますが、アニメートされません。 – ughoavgfhw

+0

UIActivityIndi​​catorは、アニメーションにバックグラウンドスレッド自体を使用するため、アニメーション化されます。 – omz

関連する問題