2012-11-25 8 views
0

Je veux que le webview de mon application soit actualisé chaque fois que l'application est active (en commençant par l'écran d'accueil ou en tapant deux fois sur le bouton d'accueil).UIWebView n'est pas rafraîchissant

Mon ViewController.m ressemble à ceci:

- (void)viewDidLoad 
{ 
NSURL *url = [NSURL URLWithString:@"http://cargo.bplaced.net/cargo/apptelefo/telefonecke.html"]; 
NSURLRequest *req = [NSURLRequest requestWithURL:url]; 
[_webView loadRequest:req]; 

[super viewDidLoad]; 

} 

- (void)viewDidAppear:(BOOL)animated{ 
[super viewDidAppear:animated]; 
[_webView reload]; 
} 

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { 
if (inType == UIWebViewNavigationTypeLinkClicked) { 
    [[UIApplication sharedApplication] openURL:[inRequest URL]]; 
    return NO; 
} 

return YES; 
} 

Quel est le problème avec ce code? Merci d'avance!

Répondre

3

Je ne pense pas viewDidAppear: se déclenchera quand l'application gagne en premier plan; ces méthodes viewWill * et viewDid * sont pour les transitions d'affichage (modale, push) et n'ont rien à voir avec les événements du cycle de vie de l'application.

Ce que vous voulez faire est de vous inscrire pour les événements de premier plan spécifiquement et actualiser le webview lorsque vous recevez la notification. Vous allez vous enregistrer pour les notifications dans votre méthode viewDidAppear: et les désinscrire dans votre méthode viewDidDisappear:. Vous faites cela de sorte que votre contrôleur, si et quand il disparaît, ne continuera pas à recharger le webview (ou tenter de recharger une instance zombie et se bloquer) quand il n'affiche rien à l'utilisateur. Quelque chose comme ce qui suit devrait fonctionner:

- (void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 

    [_webView reload]; // still want this so the webview reloads on any navigation changes 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil]; 
} 

- (void)viewDidDisappear:(BOOL)animated{ 
    [super viewDidDisappear:animated]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil]; 
} 

- (void)willEnterForeground { 
    [_webView reload]; 
} 
+0

Merci pour la solution. Cela fonctionne parfaitement. –