сбой приложения iphone при наступлении тайм-аута соединения с URL - PullRequest
0 голосов
/ 24 мая 2010

Я создаю приложение для iPhone.При этом, когда приложение запускается, оно подключается к серверу и загружает несколько изображений, а затем переходит к приложению.Когда приложение загружается, оно покажет начальный экран-заставку.пока мой сервер может пропинговать мой iphone, он работает хорошо.но проблема начинается, когда моему серверу требуется много времени, чтобы ответить на запрос NSURL.Приложение вылетает со следующей ошибкой:

Mon May 14 13:56:34 unknown Springboard[24] <Warning>: com.xxxx.xxx failed to launch in time

Я понял, что когда такие проблемы возникают с приложением, iphone вызывает сбой приложения.Я хотел бы знать, сколько максимальное время iphone позволяет приложению реагировать на такие случаи.

Есть ли максимальное значение для этого?

Ответы [ 3 ]

1 голос
/ 24 мая 2010

Таймер - что-то вроде 20-30 секунд, но это не важно.

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

0 голосов
/ 22 июня 2013

Если ваша операция запроса и ответа обрабатывается в основном потоке, пользовательский интерфейс и основной поток будут заблокированы, и получение ответа может занять некоторое время. Если основной поток заблокирован на определенное время, WATCH DOG выйдет из вашего приложения.

Лучшее решение - запустить ваш запрос в фоновом потоке или в другом потоке.

Например

   if(!backgroundQueue)
    backgroundQueue=[[NSOperationQueue alloc]init];

NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:url]
                                           cachePolicy:NSURLCacheStorageNotAllowed
                                       timeoutInterval:60];

[NSURLConnection sendAsynchronousRequest:request
                                   queue:backgroundQueue
                       completionHandler:^(NSURLResponse *response,NSData *data,NSError *error) {
    if (complete) {
           // handle your logic here
    }
}];

Эта операция обрабатывается в фоновом потоке

0 голосов
/ 24 мая 2010

Из файла Readme.txt на Пример доступности Apple :

Образец Reachability демонстрирует асинхронное использование SCNetworkReachability API. Ты можешь использовать API синхронно, но не выполнить синхронную проверку hostName в основной теме. Если устройство не может связаться с DNS-сервером или находится на медленная сеть, синхронный вызов SCNetworkReachabilityGetFlags функция может блокировать до 30 секунд, пытаясь решить Hostname. Если это произойдет на главной поток, сторожевой таймер приложения будет убить приложение через 20 секунд бездействия.

Как говорит Пол, очень и очень плохая идея - создавать какие-либо синхронные сети. Вы должны выполнить эту загрузку асинхронно на iPhone.

...