我在 rightBarButtonItem 单击时显示了模态视图控制器。我在这个控制器中使用 FbLoginView 作为示例ios-Facebook SDK 3.0 Error 5 When Posting Status Update。
但我无法多次显示模态视图控制器。我试图在 ViewDidUnload 上释放 FBLoginView 但它总是在第二次尝试打开模态视图控制器时崩溃。
我在 rightBarButtonItem 单击时显示了模态视图控制器。我在这个控制器中使用 FbLoginView 作为示例ios-Facebook SDK 3.0 Error 5 When Posting Status Update。
但我无法多次显示模态视图控制器。我试图在 ViewDidUnload 上释放 FBLoginView 但它总是在第二次尝试打开模态视图控制器时崩溃。
遇到同样的问题并已经处理了几天。最后这是我的解决方案:
if (!FBSession.activeSession.isOpen) {
theLoginView = [[FBLoginView alloc] init];
theLoginView.frame = CGRectOffset(theLoginView.frame,
([[UIScreen mainScreen] bounds].size.width-theLoginView.frame.size.width)/2,
([[UIScreen mainScreen] bounds].size.height-theLoginView.frame.size.height)/2 -50);
theLoginView.delegate = self;
[self.view addSubview:theLoginView];
[theLoginView sizeToFit];
}
//Only close the session when application is terminating, this will save the token information:
- (void)applicationWillTerminate:(UIApplication *)application {
[FBSession.activeSession close];
}
//And keep the FBSession within the app until the user want to logout:
[FBSession.activeSession closeAndClearTokenInformation];
现在对我来说它工作得很好。希望这有帮助。
FB SDK 似乎不喜欢您创建多个 FBLoginView。如果您正确终止会话,也许您可以,但我发现只创建一次 LoginView 并保留它更容易。
我这样做如下:
1)在我的.m
模态视图控制器文件中,我创建了一个静态变量
static FBLoginView* loginView;
2) 在 my 中加载模态视图控制器时viewDidLoad
,而不是
FBLoginView *loginview = [[FBLoginView alloc] initWithPermissions:
[NSArray arrayWithObject:@"status_update"]];
loginview.frame = CGRectOffset(loginview.frame, 10, 10);
我添加了一个检查以查找它是否已经初始化,如下所示:
if (!loginView) {
loginView = [[FBLoginView alloc] initWithPermissions:
[NSArray arrayWithObject:@"status_update"]];
loginView.frame = CGRectOffset(loginView.frame, 10, 10);
}
除此之外,我只是按照 FB 的 HelloFacebook 项目的例子。
不是漂亮的代码,但它似乎工作。
我有同样的问题。尝试添加如下内容:
if(!yourFBLoginView)
{
yourFBLoginView = [FBLoginView alloc] init...];
}
和/或在关闭 modalViewController 时不要忘记关闭活动会话。
if ([[FBSession activeSession] isOpen])
{
[[FBSession activeSession] close];
}
我认为我的答案(所说的变体)只是我需要拥有:
[FBSession.activeSession closeAndClearTokenInformation];
在里面:
(void)applicationWillTerminate:(UIApplication *)application
功能。对我来说特别的问题是,当我在测试时......我一直在终止应用程序而没有实际注销用户而没有破坏FBSession
,所以当我回到应用程序测试我所做的更改时 - 我的 Facebook 用户仍然登录,因此某些条件未正确满足。我认为这对于任何正在测试的人来说都非常重要(而且我实际上认为你应该在那里有那条线)以确保每次应用程序终止时清除会话以避免这个问题......我可以想象我的应用程序刚刚在某人身上崩溃,现在他们正在重新打开它并且他们经历了崩溃,因为会话从未被清除。