2011-11-15 16 views
0

私はiPad用のアプリケーションを開発しており、その中でWebサービスを使用しています。 NSXMLParserが非同期に動作していないことを除いて、すべて正常に動作しています。NSXMLParserを非同期で使用するときの問題

私は、Webサービスからデータを取得し、私はパーサデリゲートメソッドdidStartElement、foundCharactersとdidEndElementを実施しています。この

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

ようNSXMLParserにそれを供給しています。 ここcheckNo iは、その値が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; 
    } 
} 

です。私のViewControllerで

これは私がここのもの

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 

    if (textField == txtEmail) 
    { 
     [txtPwd becomeFirstResponder]; 
    } 
    if (textField == txtPwd) 
    { 
     [textField resignFirstResponder]; 
     [self.activityIndicator startAnimating]; 

     [self startWebServiceOperations]; 

     [self onLoginButtonClicked]; 

    } 
    return YES; 
} 

を呼び出しています方法ですが、他の2 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関数に移動するようにします。

私はグローバル変数は、それがすべてのヘルプは高く評価されるだろう代わりに3

の出力1を示しcheckNo表示された場合。

答えて

2

[self onLoginButtonClicked];メソッドを[xmlParser parse];の後に呼び出すと、このようになります。

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

私はこれがうまくいくと思います。

+0

返信いただきありがとうございます。はい、動作していますが、問題はonLoginButtonClickedは、上記のコードが動作しているクラスではなく、他のクラスのメソッドです。 – raziiq

+0

'@プロトコル'デリゲートメソッドを使用する必要があります。私はこれについて助けてほしいですか? – relower

+0

できれば、それを感謝します。 – raziiq

関連する問題