2011-11-15 27 views
0

我一直在爲iPad開發一個應用程序並在其中使用Web服務。除NSXMLParser不是異步工作外,一切工作正常。異步使用NSXMLParser的問題

我正在從網絡服務中的數據並將其進料的NSXMLParser這樣

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

我實現解析器委託方法didStartElement,foundCharacters和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; 
    } 
} 

在上述方法checkNo是一個全局變量,我使用,以檢查其值是否在didEndElement改變與否。

在我的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]; 
} 

現在的問題是我要完成了整個Web服務處理和NSXMLParser方法,然後移至下一個函數。換句話說,我想startWebServiceOperations函數完成完成,然後移動到onLoginButtonClicked函數。

如果我看到全局變量checkNo它顯示輸出1,而不是3

任何幫助將高度讚賞。

回答

2

如果你在[xmlParser parse];之後打電話給你的[self onLoginButtonClicked];這樣;

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

我認爲這會對你有用。

+0

感謝您的回覆。是的,這是工作,但事情是在LoginButtonClicked是一些其他類的方法,而不是上述代碼工作的類的方法。 – raziiq

+0

那麼你必須使用'@ protocol'委託方法。你想讓我幫忙嗎? – relower

+0

當然,如果可以的話,我會很感激。 – raziiq