0

getnamefornumbersSOAP ベースの Web サービス (sudzc 生成) を呼び出すメソッドがあります。これは、使用する配列に格納するデータを返します。しかし、問題は、メソッドを呼び出すと、実行に時間がかかり、このメソッドも実行された後にコーディングすると、null 配列になることです。

このメソッドが作業を完了し、残りのコードが実行されたらどうすればよいでしょうか。

4

2 に答える 2

0

カスタム デリゲートを使用する必要があります。プロトコルを定義し、現在のクラスを getnamefornumbers を実行するクラスに委譲する必要があります。操作が完了したら、呼び出し元クラスに戻る必要があります。

これはプロトコルの例ですhttp://mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

于 2012-07-02T08:36:29.263 に答える
0

NSURLConnection委任方法を使用する必要があります。通常の動作である非同期環境では:

  1. あなたは(非同期の方法で)電話をかけます
  2. アプリケーションは実行を続けます (呼び出しを行った後、プログラムは残りの命令を続行します)。

したがって、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];
        });
        });
于 2012-07-02T08:35:52.307 に答える