为什么Facebook Connect for iPhone登录对话需要延时?

时间:2010-08-02 21:41:22

标签: iphone facebook

我是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对话框?稍微延迟我很好,但我很好奇。

感谢。

所以有解决方案

1 个答案:

答案 0 :(得分:0)

何时创建FBSession对象?

如果在创建FBSession之前尝试启动对话框,则会失败。

看看你开始计时器后五秒钟内会发生什么。如果创建会话就是其中之一,那就是你的答案。

以下是我在ViewDidLoad中的表现方式,我不需要计时器或任何怪异。

//

_session = [[FBSession sessionForApplication:@“2754b468daf788dd8c0849e261798616”secret:@“cb5c2b89677d570a28c29582290a546c”delegate:self]                 保留];

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


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

//

请注意,如果您没有为按钮指定框架并且只调用init,则它不起作用。 另外,我还有一些额外的代码来检查我们是否可以从会话中恢复,该会话将所有密钥等存储为默认值。