2009-10-19 1 views
0

나는이 내 클래스에서 다음과 같은 방법 : 나는 [self CheckLoginCredentials] 언급 할 때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]; 
} 

의 loadIndicator 애니메이션 및 표시하지만 [self CheckLoginCredentials]의 주석 때 loadIndicator가 표시되지 않습니다 도착 및 또한 usernameTextField/passwordTextField resignFirstResponder 일을하지 마십시오.

내가 뭘 잘못하고 있니? 감사!

+0

해결 방법이 발견되었습니다. "- (IBAction) ShowLoader : (id) sender"라는 새로운 메서드를 만들고 사용자 인터페이스의 단추조차도 "터치 다운"을 가리 킵니다. NSXMLParser 이벤트는 "Touch Up Inside"에 연결됩니다. 이것이 올바른 해결 방법이 있다면 알려주시겠습니까? 감사. – TamTam

답변

2

나는 -initWithContentsOfURL:이 동기 URL 연결이므로 완료 될 때까지 실행되는 스레드를 차단한다고 생각합니다.

때문에 진행중인 스레드가 실행중인 스레드를 실행해야하므로 진행률 표시기가 표시되지 않습니다. 주 스레드에서 동기 URL 연결을 사용하면 해당 스레드의 UI가 차단되므로 진행률 표시기가 표시되지 않습니다.

사용하는 것이 작업을 수행하는 올바른 방법있는 NSURLConnection의

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

단순히 API 요청을 캡슐화하는 NSURLRequest 객체를 생성하고있는 NSURLConnection에 그 방법에를 전달합니다.

그런 다음 위임 콜백을 구현하여 데이터를 다시 가져옵니다.

이 방법의 장점은이 모든 것이 별도의 스레드에서 수행되어 사용자를 대신하여 처리되므로 UI가 차단되지 않는다는 것입니다.

+0

감사합니다 Jasarien, 그게 효과가! – TamTam