2011-11-17 3 views
-2

Salut, je crée une application de lecture, qui est utilisée pour partager du texte sur Facebook et Twitter.Doutes sur les notifications dans l'iPhone

Tout fonctionne parfaitement. Mon client veut les informations de connexion pour Facebook et Twitter dans la page des paramètres. Le login et la déconnexion doivent également être effectués.
Seulement après s'être connecté l'utilisateur peut partager le texte, il y a un bouton de connexion et un bouton de déconnexion pour Twitter et Facebook et le bouton de déconnexion est caché derrière le bouton de connexion.

Si l'utilisateur clique sur le bouton de connexion et que le processus de connexion est terminé, le bouton de déconnexion s'affiche et le bouton de connexion se cache et vice versa.

Tout fonctionne très bien pour moi, mais le problème est que lorsque je redirige vers la page suivante et la page des paramètres, les visibilités des boutons sont réinitialisées:
Si l'utilisateur se connecte, le bouton de déconnexion s'affiche. Mais lorsque l'utilisateur accède à une autre page et revient, le bouton de connexion est de nouveau visible. En effet, lorsque vous ouvrez une autre page et revenez, elle est traitée comme un nouveau cas dans la page des paramètres. Je pense que je peux résoudre ce problème en fournissant des notifications ou NSMutableDictionary. Mais je ne sais pas comment faire ça. Mon code pour se connecter pour Facebook et Twitter est:

pour twitter fermeture de session

-(IBAction)_clickbtntwitterlogeout:(id)sender 
{ 
    _btntwitterLogeout.hidden = YES; 
    _btnTwitter.hidden=NO; 

    [_engine clearAccessToken]; 
    [_engine clearsCookies]; 
    [_engine setClearsCookies:YES]; 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"authData"]; 
    [[NSUserDefaults standardUserDefaults]removeObjectForKey:@"authName"]; 
    NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authName"]); 
    NSLog(@"%@",[[NSUserDefaults standardUserDefaults]valueForKey:@"authData"]); 

    [_engine release]; 
    _engine=nil; 

    NSHTTPCookie *cookie; 
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    for (cookie in [storage cookies]) 
    { 
     NSString* domainName = [cookie domain]; 
     NSRange domainRange = [domainName rangeOfString:@"twitter"]; 
     if(domainRange.length > 0) 
     { 
      [storage deleteCookie:cookie]; 
     } 
    } 

} 

logein pour l'authentification twitter

-(IBAction)_clickbtnTwitter:(id)sender 
{ 

    _btntwitterLogeout.hidden = NO; 
    _btnTwitter.hidden=YES; 
    if (_engine) return; 
    _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; 
    _engine.consumerKey = kOAuthConsumerKey; 
    _engine.consumerSecret = kOAuthConsumerSecret; 

    UIViewController   *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; 

    if (controller) 
     [self presentModalViewController: controller animated: YES]; 
    else { 
     [_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]]; 
    } 
} 

même que là pour facebook. Merci d'avance.

+3

L'anglais dans votre question est fondamentalement illisible. –

+0

Un peu de ponctuation (c'est-à-dire des lettres majuscules et des points d'arrêt) améliorerait vraiment les paragraphes d'introduction. Ils seraient également mieux s'ils étaient plus courts. – Tom

+0

J'ai essayé d'éditer le texte pour qu'il le rende réellement lisible (la demande d'édition est en attente) –

Répondre

0

Vous devriez avoir une référence à la variable où vous stockez les données d'utilisateur enregistrées sur la vue qui gère votre connexion (et déconnexion).

Utilisez-vous UIViews dans le UINavigationController, correct? C'est ce que je suppose. Sinon, clarifiez, et je vais essayer de corriger la réponse en conséquence.

Voici un workflow simple:

  • Identifiants
  • Une fois que la connexion est acceptée, créez (ou mise à jour) un "userinfo" objet (pourrait être une classe dédiée ou un NSMutableDictionary)
  • Faire une référence à cet objet dans votre vue de connexion
  • Créer une nouvelle vue (ce que vous appelez la "page suivante"), référence ce même objet "userinfo" (où vous devriez avoir stocké les clés OAuth, le nom d'utilisateur, l'id, et ce genre de choses) dans cette nouvelle vue
  • Poussez la nouvelle vue

Une fois que l'utilisateur retourne à la première vue, votre point de vue doit vérifier l'objet « userinfo » et agir en conséquence. Peut-être en utilisant la méthode déléguée.

J'espère que ça aide!

+0

Oui, j'utilise uiviews, la page de configuration est une sous-vue de la vue principale, donc il n'y a pas de problème dans la vue principale, mais quand je redirige vers un autre viewcontroller et reviens, il reste en posisitin par défaut et la fonction de déconnexion est ok là, mais la peau et la peau du bouton ont changé. – ICoder

+0

Une fois que vous avez créé votre vue "Paramètres", vous devez indiquer si l'utilisateur est connecté ou non. Une simple propriété pourrait faire l'affaire. Dans la sous-vue settings, sur la méthode 'viewWillAppear:', vous pouvez vérifier cette propriété et masquer/afficher les boutons en conséquence. –

1

Pourquoi ne pas utiliser NSUserDefaults pour stocker l'état des connexions.
Est-ce que cette façon
Si la connexion réussit

[[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_IN" forKey:@"FB_LOGIN_STATUS"]; 

    [[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_IN" forKey:@"TWT_LOGIN_STATUS"]; 

autre

[[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_OUT" forKey:@"FB_LOGIN_STATUS"]; 

    [[NSUserDefaults standardUserDefaults] setObject:@"LOGGED_OUT" forKey:@"TWT_LOGIN_STATUS"]; 

et méthode viewWillAppear de votre vue contrôleur, vérifiez ces objets à décider quel bouton doit être visible et ce qui devrait être caché.

Espérons que ça aide !!

+0

alors où ai-je mis ce code? en cliquant sur le bouton de connexion et de déconnexion de Twitter et Facebook droite? et un doute de plus en vue apparaîtra comment définir le code? Je suis nouveau pour le développement d'ios, c'est pourquoi .thanks. – ICoder

+0

Pour utiliser l'état 'NSUserDefaults' comme les états Bharat J, vous devez utiliser la méthode' viewWillAppear: 'pour LIRE les valeurs de NSUserDefaults (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation /Classes/NSUserDefaults_Class/Reference/Reference.html) pour récupérer les informations consignées. Et afficher/masquer les boutons en conséquence. –

+0

@Sergio Moura oui merci pour la réponse, je l'essaie, mais pas de chance – ICoder