2012-08-15 7 views
7

Ho controller di visualizzazione modale visualizzato su rightBarButtonItem clic. Sto usando FbLoginView in questo controller come nell'esempio ios-Facebook SDK 3.0 Error 5 When Posting Status Update.IOS FacebooSDK 3.0 FBLoginVIew nella vista modaleController

Ma non riesco a mostrare il controller di visualizzazione modale più di una volta. Ho provato a rilasciare FBLoginView su ViewDidUnload ma si blocca sempre al secondo tentativo di aprire il controller della vista modale.

risposta

1

Ho avuto lo stesso problema. Tenta di aggiungere qualcosa di simile:

if(!yourFBLoginView) 
{ 
    yourFBLoginView = [FBLoginView alloc] init...]; 
} 

e/o di non dimenticare di chiudere la sessione attiva quando si respinge la tua modalViewController.

if ([[FBSession activeSession] isOpen]) 
{ 
    [[FBSession activeSession] close]; 
} 
+0

Non penso che sia saggio chiudere la sessione quando ignoriamo la modale dal momento che può disconnettere l'utente. Ci deve essere un'altra correzione o abbiamo bisogno di file sotto i bug – carbonr

5

Hai già lo stesso problema e lo gestisci già da un paio di giorni. E finalmente questa è la mia soluzione:

if (!FBSession.activeSession.isOpen) { 
    theLoginView = [[FBLoginView alloc] init]; 
    theLoginView.frame = CGRectOffset(theLoginView.frame, 
             ([[UIScreen mainScreen] bounds].size.width-theLoginView.frame.size.width)/2, 
             ([[UIScreen mainScreen] bounds].size.height-theLoginView.frame.size.height)/2 -50); 
    theLoginView.delegate = self; 
    [self.view addSubview:theLoginView]; 
    [theLoginView sizeToFit]; 
} 
//Only close the session when application is terminating, this will save the token information: 
- (void)applicationWillTerminate:(UIApplication *)application { 
    [FBSession.activeSession close]; 
} 

//And keep the FBSession within the app until the user want to logout: 
[FBSession.activeSession closeAndClearTokenInformation]; 

In questo momento per me funziona perfettamente. Spero che questo aiuto.

+0

questo funziona perfettamente anche per me! Funziona anche se si disconnette in 1 vista e si accede nell'altro e viceversa! Anche se non avevo davvero bisogno di chiudere e cancellare le informazioni dei token ovunque. – Paulo

3

L'SDK dell'FB non sembra gradire creare più di un FBLoginView. Forse è possibile se si termina correttamente la sessione, ma ho trovato più facile creare una volta il ViewView e tenerlo in giro.

ho fatto questo come segue:

1) nel mio .m modale di file View Controller, ho creato una variabile statica

static FBLoginView* loginView; 

2) Quando si carica il controller di vista modale nel mio viewDidLoad, invece di

FBLoginView *loginview = [[FBLoginView alloc] initWithPermissions: 
          [NSArray arrayWithObject:@"status_update"]]; 
loginview.frame = CGRectOffset(loginview.frame, 10, 10); 

ho aggiunto un controllo per scoprire se il suo già inizializzato, in questo modo:

if (!loginView) { 
    loginView = [[FBLoginView alloc] initWithPermissions: 
           [NSArray arrayWithObject:@"status_update"]]; 
    loginView.frame = CGRectOffset(loginView.frame, 10, 10); 

} 

Oltre a ciò, ho appena seguito l'esempio del progetto HelloFacebook di FB.

Non un bel codice, ma sembra funzionare.

0

Penso che la risposta per me (una variante di quanto è stato detto) era solo che avevo bisogno di avere:

[FBSession.activeSession closeAndClearTokenInformation];

in:

(void)applicationWillTerminate:(UIApplication *)application

funzione. Il problema specifico per me era, mentre stavo testando ... Stavo chiudendo costantemente l'app senza disconnettere l'utente senza mai distruggere lo, così quando sono tornato nell'app per testare cosa avevo cambiato - il mio Facebook l'utente era ancora loggato e quindi alcuni dei condizionali venivano incontrati erroneamente. Penso che questo sia molto importante per chiunque stia testando (e in realtà sto pensando che dovresti comunque avere quella linea) per essere sicuro di cancellare la sessione ogni volta che l'applicazione termina per evitare questo problema ... Posso immaginare uno scenario in cui la mia app si è appena bloccata su qualcuno e ora la riapre e si verifica l'arresto anomalo perché la sessione non è stata mai cancellata.