저는 iPad 용 응용 프로그램을 개발하고이 응용 프로그램에서 웹 서비스를 사용하고 있습니다. NSXMLParser가 비동기 적으로 작동하지 않는다는 것을 제외하면 모든 것이 잘 작동합니다.비동기식 NSXMLParser 사용 문제
나는 웹 서비스에서 데이터를 가져 오는 내가 파서 위임 방법 didStartElement, foundCharacters 및 didEndElement를 구현하고이
xmlParser = [[NSXMLParser alloc] initWithData: webData];
[xmlParser setDelegate: self];
[xmlParser setShouldResolveExternalEntities:YES];
[xmlParser parse];
처럼 NSXMLParser에 공급하고있다. 여기 checkNo i가 그 값에 변화 didEndElement 여부 확인 사용하고 글로벌 변수이며, 상기 방법에서 제 didEndElement 방법
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"did end element");
if ([elementName isEqualToString:@"authorizePassengerByEmailResult"])
{
NSLog(@"Inside Parser didEnd, CheckNo: %d",checkNo);
NSLog(@"Soap Results: %@", soapResults);
checkNo = 3;
[soapResults setString:@""];
elementFound = FALSE;
}
}
이다. 내의 ViewController에서
이 내가 여기 물건
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField == txtEmail)
{
[txtPwd becomeFirstResponder];
}
if (textField == txtPwd)
{
[textField resignFirstResponder];
[self.activityIndicator startAnimating];
[self startWebServiceOperations];
[self onLoginButtonClicked];
}
return YES;
}
를 호출하는 다른 두 mthods 지금 문제는 내가 전체 웹 서비스 프로세스를 마무리 할됩니다
- (void)onLoginButtonClicked
{
[self.activityIndicator stopAnimating];
if ([results isEqualToString:@"Not Authorized"])
{
}
else
{
NSLog(@"Should be 3 but Checkno:%d",checkNo);
}
}
- (void)startWebServiceOperations
{
NSLog(@"I m here, Hello");
NSString *serviceURL = @"URLAddress";
webServices = [[WebServices alloc] init];
NSString *strEmail = [NSString stringWithFormat:@"%@",txtEmail.text];
NSString *strPassword = [NSString stringWithFormat:@"%@",txtPwd.text];
[webServices createRequest:serviceURL methodNameis:@"authorizePassengerByEmail" firstParameter:strEmail secondParameter:strPassword];
}
하고 있어요 어떻게 NSXMLParser 메서드를 호출하고 다음 함수로 이동합니다. 즉, startWebServiceOperations 함수가 완전히 끝난 다음 onLoginButtonClicked 함수로 이동하려고합니다. 내가 전역 변수 checkNo를 참조하면
은 출력 1 대신 3
의 어떤 도움은 매우 극명하게 될 것이다 보여줍니다.
답장을 보내 주셔서 감사합니다. 예, 작동하지만, 문제는 onLoginButtonClicked는 위의 코드가 작동하는 클래스가 아닌 다른 클래스의 메소드입니다. – raziiq
그러면'@ protocol' 대리자 메소드를 사용해야합니다. 이 일에 대해 내가 도와 주길 바래? – relower
물론 가능합니다. 감사하게 생각합니다. – raziiq