的NSXMLParser避免的UILabel显示/隐藏
问题描述:
我在我的类中的下列方法:的NSXMLParser避免的UILabel显示/隐藏
-(IBAction)loginToAccount:(id)sender {
// Display the network activity status indicator
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
// Show the load indicator
[self.loadIndicator startAnimating];
self.loadIndicator.hidden = NO;
self.loadLabel.hidden = NO;
[usernameTextField resignFirstResponder];
[passwordTextField resignFirstResponder];
[self CheckLoginCredentials];
}
-(void)CheckLoginCredentials {
NSString *APIURL = [[NSString alloc] initWithFormat:@"http://mysite.com/xml.xml"];
NSURL *url = [[NSURL alloc] initWithString:APIURL];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[APIURL release];
[url release];
[xmlParser setDelegate:self];
[xmlParser parse];
}
当我评论[self CheckLoginCredentials]
,则loadIndicator被动画和显示,但是当我取消[self CheckLoginCredentials]
,则loadIndicator没有得到展示和usernameTextField/passwordTextField resignFirstResponder
也没有工作。
我在做什么错?谢谢!
答
我认为-initWithContentsOfURL:
是一个同步url连接,因此会阻塞它运行的线程直到它完成。
因此,进度指示器将不会显示,因为它要求它运行的线程有一个活动的运行循环。在主线程上使用同步URL连接会阻塞该线程上的UI,因此您将看不到进度指示器。
正确的方式做,这是使用NSURLConnection的的
+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate
只需创建一个封装API请求一个的NSURLRequest对象,然后将其传递给在NSURLConnection的那个方法。
然后执行代表回调以恢复您的数据。
此方法的优点是,所有这些都是在单独的线程上完成并为您处理,因此不会阻止您的用户界面。
+0
谢谢Jasarien,它的工作! – TamTam 2009-10-19 14:28:14
刚刚发现了一个解决方法:创建了一个名为“ - (IBAction)ShowLoader:(id)sender”的新方法,并指向“Touch Down”,即使是用户界面上的按钮。 NSXMLParser事件链接到“Touch Up Inside”。 你有任何想法,如果这是一个正确的解决方法?谢谢。 – TamTam 2009-10-19 12:55:38