gpt4 book ai didi

ios - 异步使用 NSXMLParser 的问题

转载 作者:行者123 更新时间:2023-11-28 23:11:33 25 4
gpt4 key购买 nike

我一直在为 iPad 开发应用程序并在其中使用 Web 服务。一切正常,除了 NSXMLParser 不是异步工作。

我正在从 Web 服务获取数据并将其提供给 NSXMLParser,就像这样

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

我正在实现解析器委托(delegate)方法 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;
}

这是另外两个方法

- (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。

如有任何帮助,我们将不胜感激。

最佳答案

如果您在 [xmlParser parse]; 之后调用您的 [self onLoginButtonClicked]; 方法;

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

我认为这对你有用。

关于ios - 异步使用 NSXMLParser 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com