0

メソッドで、UIActivityIndi​​catorViewを起動して開始します。次に、NSXMLParserを使用して、同期を使用してXMLからノード情報を取得します。解析が終了したら、UIActivityIndi​​catorViewを停止します。私の提案は、XMLを解析するときにUIActivityIndi​​catorViewを表示することですが、機能しません。何か案は?ありがとう。

- (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];
}
4

1 に答える 1

1

あなたはこのようなことをすることができます:

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

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

これにより、メインスレッドをブロックする前に、制御をrunloopに戻すことで、UIを更新する機会が与えられます。タスクによっては、代わりにバックグラウンドスレッドまたはGrand Central Dispatchを使用することをお勧めします。これにより、UIの残りの部分がブロックされず、ユーザーにプロセスをキャンセルするオプションを提供できます(これは上記の簡単なアプローチ)。

于 2011-01-13T03:18:34.850 に答える