サーバーからテキストファイルを取得し、テキストから特定の文字列を取得し、その文字列(URL)を使用してサーバーから音楽ファイルを取得するメソッド(getAndPlaySong)を持つクラスがあります。テキストファイルを取得するための最初のサーバー呼び出しは高速なので、同期的に実装しました。2つ目は時間がかかるので、表示を更新したいのですが。
メソッドが非同期リクエストの終了を待ってから続行するようにしたい。connectionDidFinishLoadingメソッドにBOOLを入れてみました:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"Succeeded! Received %d bytes of data",[_receivedData length]);
[AppDelegate playAudioWithData: _receivedData];
_dataIsReceived = YES; //BOOL
// release the connection, and the data object
[connection release];
[_receivedData release];
}
次に、getAndPlaySongメソッドにwhileループを配置します。
[self startRequest: correctSongURL]; starts the request asynchronously
while (!_dataIsReceived) {
//do stuff
}
その結果、アプリはループに達するとハングします。ループが終了することはなく、「Succeeded...」の出力も得られません。私は少し混乱していて、いくつかの入力に感謝します。