我是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 :(得分: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,则它不起作用。 另外,我还有一些额外的代码来检查我们是否可以从会话中恢复,该会话将所有密钥等存储为默认值。