2010-08-02 79 views
1

我是iPhone新手,偶然發現一個問題的答案,但我希望有人能告訴我爲什麼。爲什麼Facebook Connect for iPhone登錄對話需要時間延遲?

我在應用程序中使用Facebook Connect。由於我的應用程序需要登錄,我以編程方式調用登錄對話框而不是使用按鈕。我正在使用SDK示例批准的代碼:

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

我正在使用Xcode中的基於視圖的應用程序模板。

最初我把它放在一個我稱之爲fbLogin的自定義例程中。但是當我把:

[self fbLogin]; 

裏面viewDidLoad,什麼都不會發生。例程會被調用(我在那裏打了一個警報,只是爲了確保),但登錄對話框從未出現過。相反,如果我把這裏面viewDidLoad:

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

然後它的工作完美。任何人都知道爲什麼viewDidLoad啓動FBLogin對話爲時尚早?我稍微延遲很好,但我很好奇。

謝謝。

所以有解決方案

回答

0

你什麼時候創建你的FBSession對象?

如果您嘗試在創建FBSession之前啓動對話框,則會失敗。

看看啓動計時器後五秒內會發生什麼。如果創建會話是這些事情之一,那就是你的答案。

下面是我在ViewDidLoad中做的事情,我不需要定時器或任何怪異的東西。

//

_session = [[FBSession sessionForApplication:@ 「2754b468daf788dd8c0849e261798616」 祕密:@ 「cb5c2b89677d570a28c29582290a546c」 委託:自我] 保留];

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


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

//

需要注意的是,如果你不指定按鈕框並調用初始化,這是行不通的。 此外,我還有一些代碼來檢查我們是否可以從會話中恢復,該會話將所有密鑰等存儲爲默認值。

+0

Facebook SDK列出了顯示對話框的兩種方式 - 使用按鈕和我的程序調用的按鈕。我用我的,因爲應用程序需要Facebook連接。 我創建了一個例程,我調用fbLogin。它會像您的代碼一樣創建會話,然後檢查簡歷電話以查看是否需要顯示對話。 問題是,如果我把[self fbLogin];在viewDidLoad例程中,沒有任何反應。我在調用對話框之前總是創建會話,所以我試圖找出延遲爲什麼會起作用。 – 2010-08-04 18:34:41