2011-09-30 5 views
1

Dans mon application, j'ai un splitview contenant des données acquises via un appel WS. Pour recevoir ces données, l'utilisateur doit être connecté. Pour me connecter, je présente de manière modale un écran de connexion lors du chargement de l'application. Après avoir entré les informations d'identification, j'imprime le résultat d'un appel WS isLoggedIn. Tout cela fonctionne bien et dandy. Le problème est que dans l'écran de connexion, isLoggedIn renvoie que l'utilisateur est connecté avec succès (y compris ID de session), mais lorsque je ferme l'écran de connexion, chaque appel WS échoue parce que l'utilisateur n'est pas connecté. La correspondance de l'ID de session et le WS reçoivent les appels, mais l'iPad semble supprimer la session en ignorant l'écran de connexion. Il en résulte dans les journaux suivants:iOS - Se connecter via Webservice

2011-09-30 09:37:05.335 DSApp[366:707] url call: http://***/ipadwebservice.asmx/authenticateUser?username=user&password=pass 
2011-09-30 09:37:05.508 DSApp[366:707] Call succesful. 
2011-09-30 09:37:05.509 DSApp[366:707] Logged in successfully. 
2011-09-30 09:37:05.511 DSApp[366:707] Dismissing LoginView. 
2011-09-30 09:37:08.644 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getChildFoldersByFolderID?folderId=-1 
2011-09-30 09:37:08.649 DSApp[366:7d0f] Call failed. (Reason: User not logged in!) 
2011-09-30 09:37:09.493 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getDocumentsByFolderId?folderId=-1 
2011-09-30 09:37:09.497 DSApp[366:7d0f] Call failed. (Reason: User not logged in!) 

Une autre chose étrange est que quand je hardcode les informations de connexion et faire appel à la méthode applicationDidFinishLaunching, tout fonctionne parfaitement et tous les appels WS sont recieved avec succès.

Bueno:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
# warning hardcode login 
    [WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"]; 

    self.window.rootViewController = self.splitViewController; 

    //login 
    LoginViewController *loginView = [LoginViewController new]; 
    loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self.splitViewController presentModalViewController:loginView animated:YES]; 
    [loginView release]; 
} 

No bueno:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
    # warning hardcode login 
     //[WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"]; 

     self.window.rootViewController = self.splitViewController; 

     //login 
     LoginViewController *loginView = [LoginViewController new]; 
     loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
     [self.splitViewController presentModalViewController:loginView animated:YES]; 
     [loginView release]; 
    } 
+0

Avez-vous essayé de comparer votre entrée utilisateur à la chaîne codée en dur alors que vous vous attendez à ce qu'elle soit la même? Par exemple, définissez un point d'arrêt dans votre méthode [[WebservicesController authenticateUserWithName: nom_utilisateur et Mot_de_passe: mot de passe]] et comparez l'argument "username" passé avec la chaîne codée en dur "user" et l'argument passé en mot de passe avec le codage en dur. "pass" 'chaîne. Je veux juste exclure toute chance que celles-ci ne correspondent pas (pour l'encodage ou pour toute autre raison ... des espaces cachés, etc ...). Dans GDB, faites 'print (bool) [nom d'utilisateur isEqualToString: @" user "]' et de même pour le mot de passe. – Sam

+0

Vous devriez publier le code de vos méthodes appelant les WebServices! –

Répondre

0

Votre exemple de code est pas vraiment clair, mais avez-vous créé votre instance de WebservicesController en vous connectez contrôleur?

Parce que si vous relâchez votre contrôleur de connexion, votre WebservicesController est libérer probablement et est donc l'authentification ...

Et cela devrait expliquer pourquoi son travail dans le match de la appDelegate

0

La session ID et le WS reçoit les appels, mais l'iPad semble supprimer la session en supprimant l'écran de connexion.

Y at-il un élément de code qui peut "supprimer" la session? Si oui, mettez un point d'arrêt là-bas et voyez s'il est appelé.

Sinon, je suppose qu'après tout, vous êtes pas envoyer l'ID de session correctement avec la demande.