2010-01-06 50 views
0

我已經在我的應用中實施了Facebook連接,就像Facebook提供的示例應用一樣,它運行良好。用戶選擇通過Facebook共享數據後,他們將進入新視圖並顯示FB登錄對話框。當用戶完成後,他們退出FB共享視圖並返回到我的應用的以前的視圖。只要用戶不註銷,即使他們退出FB共享視圖,用戶仍會保持登錄狀態。這很好,和預期的一樣。更改視圖後,iPhone Facebook連接註銷崩潰

我使用相同viewDidLoad方法作爲樣品SessionViewController.m,而這正是_session被初始化:

- (void)viewDidLoad { 
    [_session resume]; 
    _loginButton.style = FBLoginButtonStyleWide; 
} 

但是我注意到,如果用戶退出和重新之後按下退出按鈕加載FB共享視圖,它會拋出SIGABRT或EXC_BAD_ACCESS並導致應用程序崩潰。在登錄按鈕的touchUpInside方法[對話框顯示]行中出現的錯誤EXC_BAD_ACCESS:

- (void)touchUpInside { 
    if (_session.isConnected) { 
    [_session logout]; 
    } else { 
    FBLoginDialog* dialog = [[[FBLoginDialog alloc] initWithSession:_session] autorelease]; 
    [dialog show]; 
    } 

即使用戶所連接的touchUpInside方法是看到已斷開的會話。有時候,而不是按下退出後崩潰按鈕註銷將會成功,但視圖的狀態文本保持「以...登錄」,並且設置的狀態/上傳圖像按鈕不會隱藏。嘗試再次登錄拋出一個SIGABRT,看起來由於FBRequest.m一零_session.sessionKey:344:

[_params setObject:_session.sessionKey forKey:@"session_key"]; 

有什麼我應該保留或跨越視圖的變化做不同?

編輯:我發現有關於Facebook的開發者論壇同樣的問題其他用戶: http://forum.developers.facebook.com/viewtopic.php?pid=193727#p193727

有沒有解決辦法,但張貼如果我找到一個我會更新這個問題。

回答

0

_session在這一點上是零,正確(這與「始終顯示未連接」一致)。你在哪裏初始化_session?

ETA:這是您的代碼,代替了Facebook Connect提供的SessionViewController,對吧?

我不知道如何釋放_session,但這就是它的樣子。

添加:

您可能希望你的按鈕處理程序更改爲

[_session簡歷]

然後在didLogin委託處理程序中執行您需要做的任何操作。這樣_session爲你實例化FBLoginDialog。

+0

它肯定看起來像你正在做的一切正確。你可以在FBDialog類中設置斷點(只是在每個函數中),看看你是否可以縮小它崩潰的地方?將它放入FBDialog :: show()方法中嗎? – justin 2010-01-06 18:46:57