2011-12-21 2 views
0

J'ai une question, dans mon application, j'ai besoin d'avoir une connexion et une webview pour afficher le contenu Web. Le problème est que j'ai un nom d'utilisateur et un mot de passe qui doivent être corrects pour obtenir une connexion. Maintenant, je veux avoir une alerte qui arrive si le nom d'utilisateur est faux. LewebView et 'timeout'

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 

ne fonctionne pas pour cela, parce que si le nom d'utilisateur ou le mot de passe est incorrect, il continuera chargement (même si elle n'affichera rien).

Est-il possible de dire à Webview de définir un intervalle de temps et d'afficher une alerte?

MERCI BEAUCOUP!

+0

Cette exigence est de mot de passe appliquée par le serveur? Si tel est le cas, la réponse doit contenir l'erreur appropriée pour que vous puissiez traiter et afficher l'erreur appropriée aux utilisateurs de l'application. – XJones

+0

non, le mot de passe est envoyé au serveur comme ceci: http: // nom d'utilisateur: mot de [email protected] et si j'entre un mauvais nom d'utilisateur/mot de passe sur mon navigateur web mac il me demande de rentrer les deux. cela ne fonctionne pas pour l'iphone, donc je voulais avoir quelque chose comme un «timer» – user1110365

Répondre

0

Si vous vous authentifiez avec votre serveur via l'authentification HTTP (selon votre commentaire ci-dessus), je le ferais différemment. Lorsque l'utilisateur entre son nom d'utilisateur/PWD, faire une demande à n'importe quelle page (quelque chose de léger) en utilisant NSURLConnection. Si le nom d'utilisateur/mot de passe est incorrect, vous pouvez gérer les échecs dans les méthodes NSURLConnectionDelegate et demander à votre utilisateur un nouveau nom d'utilisateur/mot de passe.

Vous pouvez également le faire avec la version iOS 5 de NSURLConnection au lieu des méthodes déléguées mais les docs ne sont pas très bons.

Lorsque cette première demande aboutit, chargez la vue Web.

EDIT: exemple supplémentaire de l'utilisation NSURLConnection pour vérifier si HTTP auth réussit

Ok, voici un exemple simple. Vous pouvez améliorer cela en autorisant NSURLConnection à charger la requête voulue et si elle réussit à charger les données de réponse dans le webView par opposition à l'initialisation d'une nouvelle requête. Lisez les documents relatifs au système de chargement d'URL pour en savoir plus sur l'utilisation de NSURLConnection.

Dans votre délégué webView, ouvrir une NSURLConnection avec une requête au même domaine que la demande webView avec les informations d'identification utilisateur comme suit:

- (void)performHTTPAuthRequest 
{ 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%@@test.starsightings.com", username, password]]]; 
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 
} 

// if the request succeeds, credentials must be good so load the webView 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // request completed successfully so username/password must be good 
    [self.webView loadRequest:theRequest]; 
} 

// ignore the failure 
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
} 

// if we get an auth challenge, the credentials are bad so cancel the request and alert the user 
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    [[challenge sender] cancelAuthenticationChallenge:challenge]; 
    // alert user that username/pwd is invalid 
} 
+0

okay, alors pouvez-vous m'expliquer comment le faire? parce que je ne le comprends pas :( – user1110365

+0

fait, ce n'est pas si mal – XJones

+0

merci :) Je l'ai maintenant! – user1110365