2010-08-02 80 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