我一直在为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
任何帮助将高度赞赏。
感谢您的回复。是的,这是工作,但事情是在LoginButtonClicked是一些其他类的方法,而不是上述代码工作的类的方法。 – raziiq
那么你必须使用'@ protocol'委托方法。你想让我帮忙吗? – relower
当然,如果可以的话,我会很感激。 – raziiq