Я разрабатываю приложение для iPad и потребляю в нем веб-службу. Все работает нормально, за исключением того, что 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];
}
Теперь проблема я хочу закончить весь процесс веб-службы и методы NSXMLParser, а затем перейти к следующей функции. Другими словами, я хочу, чтобы функция startWebServiceOperations полностью завершалась, а затем переходила к функции onLoginButtonClicked.
Если я вижу глобальную переменную CheckNo он показывает выход 1 вместо 3
Любая помощь будет высоко оценен.
Спасибо за ответ. Да, это работает, но дело в onLoginButtonClicked - это метод другого класса, а не класс, в котором работает вышеприведенный код. – raziiq
, тогда вы должны использовать метод делегирования '@ protocol'. вы хотите, чтобы я помог в этом? – relower
Несомненно, если вы можете, я буду признателен. – raziiq