2011-11-15 32 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