在同步过程中是否有关于UIActivityIndi​​catorView的解决方案?

时间:2011-01-13 02:41:23

标签: iphone objective-c ipad uiactivityindicatorview

在方法中,我启动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];
}

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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

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

通过在阻止主线程之前将控制权返回到runloop,UI为UI提供了更新的机会。根据您的任务,最好使用后台线程或Grand Central Dispatch,以便UI的其余部分不会阻止,您可以为用户提供取消流程的选项(这是不可能的上面的简单方法。