2010-05-24 3 views
0

Je crée l'application d'iphone. En cela, lorsque l'application démarre, elle se connecte au serveur et télécharge quelques images, puis procède à l'application. Lorsque l'application est en cours de téléchargement, l'écran d'accueil initial s'affiche. Tant que mon serveur est capable de pinguer mon iphone, ça marche bien. mais le problème commence lorsque mon serveur prend beaucoup de temps pour répondre à la demande NSURL. L'application se bloque avec l'erreur suivante:iphone app s'écraser quand la connexion de connexion d'url a expiré

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

je compris que lorsque ces problèmes se produisent avec l'application, l'iPhone bloque le appliation. Je voudrais savoir combien de temps max iphone permet à l'application de répondre à de telles instances.

Y at-il une valeur maximale pour cela?

Répondre

1

La minuterie est quelque chose comme 20-30 secondes, mais ce n'est pas important.

Vous téléchargez des données de manière synchrone. Veuillez modifier votre programme pour télécharger de manière asynchrone, en utilisant NSURLConnection. Votre application semblera beaucoup plus rapide et ne courra pas le risque de résiliation. Vous pouvez également implémenter la gestion des erreurs pour les délais d'attente.

0

De l'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.

Comme le dit Paul, il est très, très mauvaise idée de faire toute sorte de réseau synchrone. Vous devez effectuer ce chargement de manière asynchrone sur l'iPhone.

0

Si votre demande et votre réponse sont traitées dans le thread principal, l'interface utilisateur et le thread principal sont bloqués et la réponse peut prendre un certain temps. Si le fil principal est bloqué pendant un certain temps, WATCH DOG quittera votre application.

La meilleure solution est d'exécuter votre requête dans un thread d'arrière-plan ou dans un autre thread.

Par exemple

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 
    } 
}]; 

Cette opération traitée en fil d'arrière-plan

Questions connexes