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];
}
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
Vous devriez publier le code de vos méthodes appelant les WebServices! –