1

現在取り組んでいるアプリの標準 NSURLConnection クラスを作成しています。これは、後続のアプリでも使用できることを願っています。

アイデアは、URL とパラメーター配列をこのクラスのメソッドに渡して接続を開始し、完了時に結果を返せるようにすることです。

-(NSData*)go :(NSString*)url :(NSArray)params

これを別のクラスから呼び出しているので、結果をその呼び出しクラスの変数に設定できるようにしたいと考えています。

NSData *result = [[connect alloc]go:testurl :testparams];

問題は、結果がすぐに届かないことです。そのため、「go」メソッドで設定した NSData を返すと空白になります。

NSCondition のようないくつかのことを試し、go メソッドの別のスレッドで while ループを実行して、それが終了したかどうかを確認しました。

残念ながら、私はこれを事前に知りませんでした。NSURLConnections からの非同期接続は、「go」メソッドで実行された NSCondition と同じスレッドで実行されます。このため、そのメソッドをロックして早期に返さないようにしたときに、接続もロックして、完了コールバックに到達しませんでした。

接続が完了するまで「go」メソッドを効果的に一時停止して、アプリのどこにでもデータを返すことができるようにするにはどうすればよいですか。

私がこれについて完全に間違った方法で行っている可能性があるので、その場合はお知らせください。ただし、複数のリクエストが同時に送信され、この接続クラスのさまざまなインスタンスがそれらすべてを制御できるようにしたいため、このように機能する必要があります。

4

0 に答える 0