У меня есть класс с методом (getAndPlaySong), который получает текстовый файл с сервера, получает определенную строку из текста и использует строку (URL) для получения музыкального файла из сервер. Первый вызов сервера для получения текстового файла выполняется быстро, поэтому я реализовал его синхронно. Второй занимает больше времени, и я хочу обновить отображение во время его появления.Обнаружение при завершении асинхронного подключения
Я хочу, чтобы метод ожидал завершения асинхронного запроса до его продолжения. Я попытался положить BOOL в методе connectionDidFinishLoading:
- (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:
[self startRequest: correctSongURL]; starts the request asynchronously
while (!_dataIsReceived) {
//do stuff
}
Результатом является то, что приложение зависает, когда он достигает цикла. Цикл никогда не заканчивается, и я никогда не получаю вывод «Succeeded ...». Я немного смущен и буду благодарен за какой-то вклад.
Не могли бы вы показать код внутри цикла while? Что именно вы хотите сделать, пока URL-адрес загружается? Когда вы говорите: «Я хочу обновить дисплей во время его появления» - что именно вы хотите сделать? Однократное действие или что-то непрерывное? –
Имеет смысл, что он будет висеть, вы зацикливаетесь бесконечно. Вам нужно создать обратный вызов, который будет срабатывать, когда запрос будет завершен. Посмотрите на использование системы уведомлений. – Kaili