Как может (void) connectionDidFinishLoading что-то ВОЗВРАЩАТЬ?

У меня есть простой сценарий:

  • main.m (это мой основной класс)
  • myClass.m (это дополнительный класс)

В моих планах должно получиться примерно так

(в ГЛАВНОМ.м)

myClass *foo = [[myClass alloc] init];
NSArray *array = [foo returnAnArray];

Что делает myClass, так это открывает новый NSURLConnection, извлекает некоторые данные и, когда они готовы, анализирует их и возвращает массив.

Чтобы вернуть массив с проанализированными данными, я написал это простое

(NSArray *) returnArray:(NSString *)dataDownloadedFromWeb

Чтобы узнать, когда данные ДЕЙСТВИТЕЛЬНО закончили загрузку и когда начинать их анализ, я использую

- (void) connectionDidFinishDownloading: (NSURLConnection *connection)

Но ГДЕ и КАК я могу вызвать returnArray:, если connectionDidFinishLoading имеет значение VOID? :(

Надеюсь, это имеет смысл... Я действительно застрял и не могу найти решение. Я пытался использовать NSNotification, но это тоже не сработало.

Спасибо всем за поддержку! Энрико


person Enrico Querci    schedule 06.10.2009    source источник


Ответы (2)


Вам нужно реализовать connectionDidFinishDownloading самостоятельно. Вам нужно создать объект делегата, который вы передаете NSURLConnection при его создании. Объект делегата должен реализовать connectionDidFinishDownloading.

Затем NSURLConnection вызовет connectionDidFinishDownloading для вашего объекта делегата в соответствующее время.

Там есть дополнительная информация здесь

person Tom Jefferys    schedule 06.10.2009
comment
Вот и все! :) DELEGATE был выходом, я с самого начала подозревал об этом... Спасибо за помощь, действительно, вы сделали мой день. Еще многое предстоит узнать о Objective-C... - person Enrico Querci; 07.10.2009

Предположительно, вы имеете в виду - (void)connectionDidFinishLoading:(NSURLConnection *)connection ?

В любом случае, вы не ждете, пока он закончится — вы анализируете данные, когда они будут готовы в - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

  • connectionDidFinishLoading: сообщает вам, что больше данных не будет.
person Community    schedule 06.10.2009
comment
+1 И, как указывают Том и джиб, вам нужно самостоятельно реализовать эти методы делегата, чтобы получать обратные вызовы на разных этапах процесса. - person gavinb; 06.10.2009