的NSXMLParser避免的UILabel显示/隐藏

的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也没有工作。

我在做什么错?谢谢!

+0

刚刚发现了一个解决方法:创建了一个名为“ - (IBAction)ShowLoader:(id)sender”的新方法,并指向“Touch Down”,即使是用户界面上的按钮。 NSXMLParser事件链接到“Touch Up Inside”。 你有任何想法,如果这是一个正确的解决方法?谢谢。 – TamTam 2009-10-19 12:55:38

我认为-initWithContentsOfURL:是一个同步url连接,因此会阻塞它运行的线程直到它完成。

因此,进度指示器将不会显示,因为它要求它运行的线程有一个活动的运行循环。在主线程上使用同步URL连接会阻塞该线程上的UI,因此您将看不到进度指示器。

正确的方式做,这是使用NSURLConnection的的

+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate 

只需创建一个封装API请求一个的NSURLRequest对象,然后将其传递给在NSURLConnection的那个方法。

然后执行代表回调以恢复您的数据。

此方法的优点是,所有这些都是在单独的线程上完成并为您处理,因此不会阻止您的用户界面。

+0

谢谢Jasarien,它的工作! – TamTam 2009-10-19 14:28:14