2010-05-24 2 views
0

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

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

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

Возможно ли какое-либо максимальное значение?

ответ

1

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

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

0

Из Readme.txt на Apple's Reachability example:

The Reachability sample demonstrates the asynchronous use of the SCNetworkReachability API. You can use the API synchronously, but do not issue a synchronous check by hostName on the main thread. If the device cannot reach a DNS server or is on a slow network, a synchronous call to the SCNetworkReachabilityGetFlags function can block for up to 30 seconds trying to resolve the hostName. If this happens on the main thread, the application watchdog will kill the application after 20 seconds of inactivity.

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

0

Если ваша операция запроса и ответа обрабатывается в основном потоке, пользовательский интерфейс и основной поток будут заблокированы, и для получения ответа может потребоваться некоторое время. Если основной поток заблокирован в течение определенного времени, 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 
    } 
}]; 

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