URL applicationWillTerminate target C - PullRequest
       0

URL applicationWillTerminate target C

3 голосов
/ 24 февраля 2012

Я пытался выполнить или запросить URL-адрес внутри события de applicationWillTerminate, но когда я это делаю, другие функции, такие как:

- (NSURLRequest *)connection:(NSURLConnection *)connection
             willSendRequest:(NSURLRequest *)request            redirectResponse:(NSURLResponse *)redirectResponse {
  [baseURL autorelease];
  baseURL = [[request URL] retain];
  return request;
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
  [responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
  [responseData appendData:data];
}

они не выполняются, я думаю, потому что последняя выполненная функция или событие - это applicationWillTerminate. Есть ли способ достичь или сделать это.

Ответы [ 4 ]

1 голос
/ 19 декабря 2017

Я столкнулся с той же проблемой вчера и решил ее, используя фрагмент кода ниже:

NSURLResponse* response = nil;
NSString* requestUrlString = <your URL>;
NSMutableURLRequest *syncRequest  = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestUrlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
[NSURLConnection sendSynchronousRequest:syncRequest returningResponse:&response error:nil];
0 голосов
/ 24 февраля 2012

В документации Apple для метода делегата applicationWillTerminate для UIApplication говорится, что ваша реализация этого метода имеет примерно пять секунд для выполнения задач и возврата. Вызов метода, который использует сеть и будет работать в течение неопределенного периода времени, похоже, нарушает цель метода.

0 голосов
/ 24 февраля 2012

На данном этапе полезной техникой является просто сохранение флажка, который гласит: «При следующем запуске приложение должно выполнить этот URL-запрос».Затем при следующем запуске приложения, если флаг имеет значение true, запустите запрос URL.Это может не подходить для каждой ситуации, но имеет то преимущество, что у него достаточно времени для запуска.

0 голосов
/ 24 февраля 2012

Я был бы очень удивлен, если бы вы смогли осуществить это.applicationWillTerminate не врет!Конечно, вы можете настроить запрос и отправить его, но как только этот метод вернётся, ваши делегаты не будут зависать достаточно долго, чтобы получать и отвечать на обратные вызовы.

Боюсь, вам, вероятно, придется найти другой способ добиться того, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...