Web サービス呼び出しの処理中に、あるページから別のページに移動するのが難しいと感じています。ここに私の問題があります、
Web サービスを正常に呼び出して xml を取得できます。また、xml を解析して必要なタグを取得することもできます。私の問題は、ボタンアクションでこのすべてのプロセスを実行していることです。Web サービスと解析が完了したら、ページをナビゲートしたいと考えています。しかし、サービス呼び出しと解析が完了する前にページが移動しているため、それを行うことができませんでした。
以下は私がやっていることのコードです
- (IBAction)CIS_Login:(id)sender
{
WebServiceAuth *service = [[WebServiceAuth alloc]init];
NSString *username,*password;
username = CIS_Username.text;
password = CIS_Password.text;
[service getUsername:username getPassword:password]; (Calling Web service)
NSString *getSessionToken = [USERDEFAULTS objectForKey:@"sessionToken"];
if (getSessionToken)
{
[self receivedSessionTokenFromCloud];
}
else
{
[self receivedErrorMessageFromCloud];
}
}
ウェブサービスページ
-(void)getUsername:(NSString *)usernameAuth getPassword:(NSString *)passwordAuth
{
NSString *soapMessage = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<session xmlns=\"http://schemas.XYZ.com/ABC/2011\">"
"<account>\n"
"<username>%@</username>\n"
"<password>%@</password>\n"
"</account>\n"
"</session>",usernameAuth,passwordAuth];
NSLog(@"%@",soapMessage);
NSURL *url = [NSURL URLWithString:@"https://XYZ.com/sessions"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
[theRequest addValue:@"Token" forHTTPHeaderField:@"Code"];
[theRequest addValue:@"application/xml" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue: @"application/xml" forHTTPHeaderField:@"Accept"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@",[theRequest allHTTPHeaderFields]);
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if(theConnection)
{
Data = [NSMutableData data];
}
else
{
NSLog(@"theConnection is NULL");
}
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"DONE. Received Bytes: %d", [Data length]);
NSString *theXML = [[NSString alloc] initWithBytes: [Data mutableBytes] length:[CiscoData length] encoding:NSUTF8StringEncoding];
NSLog(@"%@",theXML);
UserOAuthXML *xmlOAuth = [[UserOAuthXML alloc]init]; (Xml Parsing is done here)
[xmlOAuth getDataFromUserOAuth:Data];
}
Xml パーサー ページ
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:@"code"])
{
recordResult = FALSE;
NSLog(@"%@",soapResults);
[USERDEFAULTS setValue:soapResults forKey:@"code"];
}
else if ([elementName isEqualToString:@"message"])
{
recordResult = FALSE;
NSLog(@"%@",soapError);
[USERDEFAULTS removeObjectForKey:@"value"];
}
}
私の質問を理解していただければ幸いです。ありがとう