getnamefornumbers
SOAP ベースの Web サービス (sudzc 生成) を呼び出すメソッドがあります。これは、使用する配列に格納するデータを返します。しかし、問題は、メソッドを呼び出すと、実行に時間がかかり、このメソッドも実行された後にコーディングすると、null 配列になることです。
このメソッドが作業を完了し、残りのコードが実行されたらどうすればよいでしょうか。
getnamefornumbers
SOAP ベースの Web サービス (sudzc 生成) を呼び出すメソッドがあります。これは、使用する配列に格納するデータを返します。しかし、問題は、メソッドを呼び出すと、実行に時間がかかり、このメソッドも実行された後にコーディングすると、null 配列になることです。
このメソッドが作業を完了し、残りのコードが実行されたらどうすればよいでしょうか。
カスタム デリゲートを使用する必要があります。プロトコルを定義し、現在のクラスを getnamefornumbers を実行するクラスに委譲する必要があります。操作が完了したら、呼び出し元クラスに戻る必要があります。
これはプロトコルの例ですhttp://mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html
NSURLConnection
委任方法を使用する必要があります。通常の動作である非同期環境では:
したがって、2つのソリューションが必要であり、同期する必要があるため、回答が得られた後にのみ続行します(この場合、配列がいっぱいになります)。これはおそらくお勧めできません。または、非同期にして、実際に配列があるときに配列を使用します。
これを実装する方法の詳細については、私がアドバイスできるように、より詳細を提供する必要があります。
アップデート 1.0
-(void)requestConnectionToServer{
NSURL *url= [NSURL URLWithString:@"myWebServiceURL"];
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:url];
self.reference=aReference;
[theRequest setHTTPMethod:@"GET"];
[theRequest setTimeoutInterval:20.0];
[NSURLConnection connectionWithRequest:theRequest delegate:self];
}
#pragma mark NSURLConnectionDelegate Implementation
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"Response:%@",[[NSString alloc] initWithData:webData encoding:NSASCIIStringEncoding]);
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"ERROR with theConenction %@",error);
}
アップデート 2.0
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
myArray = [MyWebServiceAccess getnamefornumbers];
dispatch_sync(dispatch_get_main_queue(), ^{
[myArray makeSomething];
});
});