2012-11-05 30 views
7

çağrısının sonraki çağrısında çöker. CloseAndClearTokenInformation çağrısından sonra openWithBehavior öğesini çağırırsak, EXC_BAD_ACCESS neden olur. Yerleşik iOS dahili iletişim kutusunu veya hızlı geçiş yapanlardan birini kullanıp kullanmadığına bakılmaksızın. Facebook iOS SDK 3.1, FBSession openWithBehavior

Bizim kod

eserler aracılığıyla FB, ilk kez giriş yapmak için:

if (![FBSession activeSession]) { 
    #ifdef FREE_APP 
     NSString* suffix = @"free"; 
    #else 
     NSString* suffix = @"paid"; 
    #endif 
    FBSession *session = [[[FBSession alloc] initWithAppID:@"111111111111111" 
          permissions:permissions 
         urlSchemeSuffix:suffix 
        tokenCacheStrategy:nil] autorelease]; 
    [FBSession setActiveSession:session]; 
} 
else if ([FBSession activeSession].isOpen) 
    [[FBSession activeSession] close]; 

[[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent 
       completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
            [self sessionStateChanged:session state:state error:error]; 
           }]; 

Bizim kodunu çıkış için, bundan sonra kod yukarıdaki openWithBehavior sonra başarısız: Başlangıçta yerine openActiveSessionWithReadPermissions kullanıyordum

[[FBSession activeSession] closeAndClearTokenInformation]; 

OpenWithBehavior, 3.1 docs olarak öngörülen, çökmesine değil, ancak uygulama FB app/Safari'den geri geçiş yapmadı. Belki de bir son eki olması gerektiğinden dolayı? Uygulama değiştirmeyi düzeltmek ve buna geri dönmeniz en kolaysa, lütfen öneride bulunun.

Teşekkürler. Ben

if (!(self.state == FBSessionStateCreated || 
     self.state == FBSessionStateCreatedTokenLoaded)) { 
    // login may only be called once, and only from one of the two initial states 
    [[NSException exceptionWithName:FBInvalidOperationException 
          reason:@"FBSession: an attempt was made to open an already opened or closed session" 
          userInfo:nil] 
    raise]; 
} 

: Ben 5.x simülatör koştu, ben openWithBehavior edilmiş fazladan, çok yararlı, hata iletisi gördüm

cevap

7

, işler çok daha net olacaktır kaynakta baktım ve her zaman openWithBehavior çağırmadan önce taze bir oturum oluşturmak için kodumu değiştirdi ve mutlu görünüyor.

GÜNCELLEME: İşte

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 


     if ([FBSession activeSession]) 
     [[FBSession activeSession] closeAndClearTokenInformation]; 

     #ifdef FREE_APP 
     NSString* suffix = @"free"; 
     #else 
     NSString* suffix = @"paid"; 
     #endif 

     NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil]; 

     FBSession *session = [[FBSession alloc] initWithAppID:mFacebookID 
               permissions:permissions 
              urlSchemeSuffix:suffix 
             tokenCacheStrategy:nil]; 

     [FBSession setActiveSession:session]; 

     If (allowLoginUI == YES) { 
     NSLog(@"Calling openWithBehavior"); 
     [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent 
            completionHandler:^(FBSession *session, FBSessionState state, NSError *error) 
            { 
             [self sessionStateChanged:session state:state error:error]; 
            } 
     ]; 
    } else if(session.state == FBSessionStateCreatedTokenLoaded) { 
     NSLog(@"Calling openWith completion handler"); 
     [session openWithCompletionHandler:^(FBSession *_session, FBSessionState status, NSError *error) 
              { [self sessionStateChanged:session state:status error:error];} 
     ]; 
    } 

    [session release]; 

    return true; 
    } 
+0

, ben yere gelebilmek ve neden bu kodu yazmadım ... sonra hep taze oturumu başlatmasını önce, kapatır aktif oturum için denetler güncellenmiş kod . ve openWithBehaviour'dan önce yazdım, yine de openWithBehaviour – Heena

+0

'da çöktü. Yukarıdaki ilk snippet, hatayı atan facebook sınıfından. Sadece neler olup bittiğine bir bağlam eklemek için ekledim. Her zaman yeni bir oturum oluşturmadan önce, etkin bir oturum için kontrol ekledikten ve kapattıktan sonra koduma ekledim. – leontx

İlgili konular