2009-12-10 4 views
2

Je charge une UIWebview et demande une URL qui peut prendre un certain temps pour terminer le chargement. La demande commence et commence à recevoir des données. Cependant, il ne semble pas que la requête se termine. Le webViewDidFinishLoad ne se déclenche jamais et le webView didFailLoadWithError: callback ne le fait pas non plus.NSMutableURLRequest timeout ne se déclenche pas si les données commencent à charger mais pas webViewDidFinishLoad

Un délai d'expiration d'une requête NSURLRequest se produit-il uniquement si aucune réponse ne reçoit de données ou se déclenche-t-elle si la demande ne se termine pas dans cet intervalle également?

Si c'est le premier, existe-t-il une solution élégante pour temporiser la demande?

Code pertinent est:

charge la demande:

- (void) loadRequest { NSString *targetURL = @" http://myrequestUrl/ "; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: targetURL] cachePolicy: NSURLRequestReloadIgnoringLocalCacheData timeoutInterval: 15.0] autorelease];

[request setHTTPBasicID: [[self credentialManager] userID] password:[[self credentialManager] password]]; 
[webView loadRequest:request]; 

délégué pour répondre à délai d'attente

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible: NO]; [alert hide]; [alert autorelease]; alert = nil; NSLog(@"error - %@", error); [self showRetryPrompt: error];
}

Répondre

5

Le délai d'attente pour le NSURLRequest est pour la connexion. Si vous êtes connecté et que le serveur a besoin de beaucoup de temps pour répondre, le délai d'attente ne vous servira à rien. Vous devrez configurer votre propre NSTimer pour le délai que vous souhaitez et annuler la demande vous-même.

0

D'accord avec l'utilisateur158743. A l'aide de NSTimer, définissez le temporisateur pour démarrer à la méthode de délégué webViewDidStartLoad, puis assurez-vous d'avoir des compteurs sur les méthodes webViewDidFinishLoad et webViewDidStarLoad pour vérifier si le webView a été chargé (c'est un hack vilain, mais à moins que vous ne utilisez javascript pour vérifier le nombre d'éléments dans votre page, il n'y a vraiment aucun moyen de savoir combien de fois ces 2 méthodes seront appelées). Après cela, vérifiez les compteurs de la méthode que vous utilisez après que le temporisateur a atteint son heure, et cela devrait fonctionner.

Le code NSTimer est ici ->http://www.iphonedevsdk.com/forum/iphone-sdk-development/14403-nstimer-examples.html

Hope this helps, il l'a fait pour moi. Bien que je sache qu'il y a des défauts, cela fonctionne pour moi car je charge un écran de démarrage qui est censé être léger en premier lieu. Je suis toujours à la recherche de solutions, je publierai des modifications ici si j'ai d'autres alternatives.

Vos commentaires sont les bienvenus!

Questions connexes