NSURLConnection объект игнорирует реализованные методы - PullRequest
1 голос
/ 01 февраля 2012

Мой вопрос относится к коду в моем однопоточном приложении, которое обновляет данные локальной базы данных устройств через NSURLConnection до веб-службы.

Моя инициализация NSURLConnection не входит ни в один из реализованных методов иэто меня озадачилоВнутри моего метода AppDelegate.m -> applicationDidFinishLaunching я создаю объект NSURLConnection:

//AppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application
{

   // ... Building request URL here ...

   NSString *requestURL = [NSString stringWithFormat:@"%@%@", URI,urlEncodedParamStr]
   NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]];
   NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

   responseData = [[NSMutableData data] retain];

   if(connection !=nil)
      [connection release];

}

Теперь выполнение должно перейти к любому из следующих соответствующих методов NSURLConnection, которые я реализовал в AppDelegate.m:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{[responseData setLength:0];}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {[responseData appendData:data];}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{//my implementation}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {//my implementation} 

Но вместо этого выполнение продолжается со строкой непосредственно после инициализации соединения NSURLConnection *, не выполняя ни один из реализованных методов NSURLConnection.Я подтвердил, что запрос не равен нулю, и поставил точки останова в реализованных методах NSURLConnection - они не вызываются.

Debugging session screenshot

Что происходит?

Спасибокак всегда!

1 Ответ

4 голосов
/ 01 февраля 2012

Вам нужно позвонить

[connection start];

до того, как на самом деле будет запущен удаленный вызов.

И даже в этом случае будет выполняться следующая строка кода. Это асинхронный вызов, который выполняется в фоновом потоке. Ответ будет получен позже, и тогда будет вызван ваш метод connection... (это может быть до времени ожидания (30 секунд) позже).

...