我一直在爲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