2010-08-02 4 views
1

Je ne connais pas la programmation iPhone et je suis tombé sur une réponse à une question, mais j'espérais que quelqu'un pourrait me dire pourquoi. J'utilise Facebook Connect dans l'application. Comme mon application nécessite une connexion, j'appelais la boîte de dialogue de connexion par programme plutôt qu'avec un bouton. J'utilise l'exemple de SDK approuvé le code:Pourquoi le dialogue de connexion de Facebook Connect pour iPhone a-t-il besoin d'un délai?

FBLoginDialog* dialog = [[[FBLoginDialog alloc] init] autorelease]; 
[dialog show]; 

Je travaille avec un modèle d'application View-Based dans Xcode. Au début, je l'avais placé dans une routine personnalisée que j'appelais fbLogin. Mais quand je mets:

[self fbLogin]; 

inside viewDidLoad, rien ne se passerait. La routine serait appelée (j'ai tapé une alerte là-bas juste pour être sûr) mais la boîte de dialogue de connexion n'est jamais apparue. Au lieu de cela, si je mets ceci à l'intérieur viewDidLoad:

[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(fbLogin) userInfo:nil repeats:NO]; 

Ensuite, cela a fonctionné parfaitement. Quelqu'un sait pourquoi viewDidLoad est trop tôt pour lancer la boîte de dialogue FBLogin? Je vais bien avec le léger retard, mais je suis curieux.

Merci.

Donc, il y a la solution

Répondre

0

Quand créez-vous votre objet FBSession?

Si vous essayez de lancer la boîte de dialogue avant la création de FBSession, cela échouera. Regardez ce qui se passe dans les cinq secondes qui suivent le démarrage de votre minuterie. Si la création de la session est l'une de ces choses, c'est votre réponse.

Voici comment je le fais dans ViewDidLoad, je n'ai pas besoin de minuterie ou d'étrangeté.

//

_session = [[FBSession sessionForApplication: @ "2754b468daf788dd8c0849e261798616" secret: @ "cb5c2b89677d570a28c29582290a546c" délégué: auto] retain];

CGRect buttonFrame = CGRectMake(160.0f, 240.0f, 60, 37); 


if ([_session resume] == NO) 
{ 
    FBLoginButton* loginButton = [[FBLoginButton alloc]initWithFrame:buttonFrame]; 
    [self.view addSubview: loginButton]; 
} 

//

Notez que si vous ne spécifiez pas d'image pour le bouton et juste appeler init, il ne fonctionne pas. En outre, j'ai un peu plus de code pour vérifier si nous pouvons reprendre à partir de la session, qui stocke toutes les clés etc comme valeurs par défaut.

+0

Le SDK Facebook répertorie deux façons d'afficher la boîte de dialogue - la vôtre qui utilise le bouton et la mienne qui est appelée par programme. J'ai utilisé le mien parce que l'application nécessite une connexion Facebook. J'ai créé une routine que j'appelle fbLogin. Il crée la session comme votre code, puis vérifie l'appel de reprise pour voir si elle doit afficher la boîte de dialogue. Le problème est que si je mets [self fbLogin]; Dans la routine viewDidLoad, rien ne se passe. Je crée toujours la session avant d'appeler le dialogue, donc j'essaie de comprendre pourquoi le retard le fait fonctionner. –

Questions connexes