2012-11-05 27 views
7

Nếu chúng tôi gọi openWithBehavior sau cuộc gọi đến closeAndClearTokenInformation, nó gây ra EXC_BAD_ACCESS. Bất kể nó đang sử dụng hộp thoại tích hợp iOS gốc hay một trong những hộp thoại chuyển đổi nhanh.Facebook iOS SDK 3.1 gặp sự cố khi gọi tới FBSession openWithBehavior

Mã của chúng tôi để đăng nhập vào FB, lần đầu tiên thông qua các tác phẩm:

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]; 
           }]; 

Mã của chúng tôi để đăng xuất, sau đó mã trên thất bại sau khi openWithBehavior:

[[FBSession activeSession] closeAndClearTokenInformation]; 

tôi ban đầu được sử dụng openActiveSessionWithReadPermissions thay của openWithBehavior, như được quy định trong tài liệu 3.1, không bị lỗi nhưng ứng dụng chuyển đổi từ ứng dụng FB/Safari không hoạt động. Có lẽ vì cần phải có hậu tố? Nếu nó sẽ dễ dàng nhất để sửa lỗi chuyển đổi ứng dụng và quay lại điều đó, vui lòng thông báo.

Cảm ơn.

Trả lời

7

Khi tôi chạy trong mô phỏng 5.x, tôi thấy thêm, rất hữu ích, thông báo lỗi từ openWithBehavior, sau đó nhìn nó trong nguồn mà làm những điều nhiều rõ ràng hơn:

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]; 
} 

tôi đã thay đổi mã của tôi để luôn tạo ra một phiên mới trước khi gọi openWithBehavior và nó có vẻ hạnh phúc.

UPDATE: Dưới đây là các mã được cập nhật để kiểm tra cho một phiên hoạt động, sau đó đóng nó, trước khi luôn instantiating một phiên tươi ...

- (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

, tôi đã không nhận đâu và tại sao viết mã này . và tôi đã viết nó trước khi openWithBehaviour vẫn bị rơi trong openWithBehaviour – Heena

+0

Đoạn đầu tiên ở trên là từ lớp facebook đã ném lỗi. Tôi chỉ bao gồm nó để thêm bối cảnh cho những gì đang xảy ra. Tôi đã tiếp tục và thêm mã của mình sau khi thêm kiểm tra cho một phiên hoạt động và đóng mã đó trước khi luôn tạo phiên mới. – leontx

Các vấn đề liên quan