在方法中,我启动UIActivityIndicatorView启动。 然后使用NSXMLParser通过同步从XML获取节点信息。 完成解析后,我想停止UIActivityIndicatorView。 我的建议是在解析XML时出现UIActivityIndicatorView,但它不起作用。 有任何想法吗?感谢。
- (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 :(得分: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的其余部分不会阻止,您可以为用户提供取消流程的选项(这是不可能的上面的简单方法。