2011-11-15 4 views
0

저는 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

의 어떤 도움은 매우 극명하게 될 것이다 보여줍니다.

답변

2

[self onLoginButtonClicked]; 메서드를 [xmlParser parse]; 다음과 같이 호출하면됩니다.

xmlParser = [[NSXMLParser alloc] initWithData: webData]; 
    [xmlParser setDelegate: self]; 
    [xmlParser setShouldResolveExternalEntities:YES]; 
    [xmlParser parse]; 
[self onLoginButtonClicked]; 

나는 이것이 당신에게 도움이 될 것이라고 생각합니다.

+0

답장을 보내 주셔서 감사합니다. 예, 작동하지만, 문제는 onLoginButtonClicked는 위의 코드가 작동하는 클래스가 아닌 다른 클래스의 메소드입니다. – raziiq

+0

그러면'@ protocol' 대리자 메소드를 사용해야합니다. 이 일에 대해 내가 도와 주길 바래? – relower

+0

물론 가능합니다. 감사하게 생각합니다. – raziiq