7

我在 rightBarButtonItem 单击时显示了模态视图控制器。我在这个控制器中使用 FbLoginView 作为示例ios-Facebook SDK 3.0 Error 5 When Posting Status Update

但我无法多次显示模态视图控制器。我试图在 ViewDidUnload 上释放 FBLoginView 但它总是在第二次尝试打开模态视图控制器时崩溃。

4

4 回答 4

5

遇到同样的问题并已经处理了几天。最后这是我的解决方案:

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];

现在对我来说它工作得很好。希望这有帮助。

于 2012-08-18T18:14:38.027 回答
3

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 项目的例子。

不是漂亮的代码,但它似乎工作。

于 2012-08-19T21:07:29.017 回答
1

我有同样的问题。尝试添加如下内容:

if(!yourFBLoginView)
{
    yourFBLoginView = [FBLoginView alloc] init...];
}

和/或在关闭 modalViewController 时不要忘记关闭活动会话。

if ([[FBSession activeSession] isOpen])
{
    [[FBSession activeSession] close];
} 
于 2012-08-17T11:34:02.200 回答
0

我认为我的答案(所说的变体)只是我需要拥有:

[FBSession.activeSession closeAndClearTokenInformation];

在里面:

(void)applicationWillTerminate:(UIApplication *)application

功能。对我来说特别的问题是,当我在测试时......我一直在终止应用程序而没有实际注销用户而没有破坏FBSession,所以当我回到应用程序测试我所做的更改时 - 我的 Facebook 用户仍然登录,因此某些条件未正确满足。我认为这对于任何正在测试的人来说都非常重要(而且我实际上认为你应该在那里有那条线)以确保每次应用程序终止时清除会话以避免这个问题......我可以想象我的应用程序刚刚在某人身上崩溃,现在他们正在重新打开它并且他们经历了崩溃,因为会话从未被清除。

于 2014-12-27T03:25:39.503 回答