Facebook iOS SDK 3.5.1 好友请求对话框在关闭时崩溃

Posted

技术标签:

【中文标题】Facebook iOS SDK 3.5.1 好友请求对话框在关闭时崩溃【英文标题】:Facebook iOS SDK 3.5.1 Friend Request Dialog crashed on close 【发布时间】:2013-05-08 15:25:20 【问题描述】:

我有一个使用 Facebook SDK 的 ios 应用。我从 3.2 升级到 3.5.1 部分是为了让我可以使用无摩擦的好友请求。该过程适用于:

NSMutableDictionary* params =   [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];

[FBWebDialogs presentRequestsDialogModallyWithSession:[FBSession activeSession]
                                                  message:[NSString stringWithFormat:@"I just posted an action - give me some points!"]
                                                    title:@"Get Points from your friends"
                                               parameters:params
                                                  handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) 
                                                      if (error) 
                                                          // Case A: Error launching the dialog or sending request.
                                                          NSLog(@"Error sending request.");
                                                       else 
                                                          if (result == FBWebDialogResultDialogNotCompleted) 
                                                              // Case B: User clicked the "x" icon
                                                              NSLog(@"User canceled request.");
                                                           else 
                                                              NSLog(@"Request Sent.");
                                                          
                                                      ];

但只要我添加好友缓存(从 Facebook 网站复制/粘贴):

    NSMutableDictionary* params =   [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];



    FBFrictionlessRecipientCache *friendCache = [[FBFrictionlessRecipientCache alloc] init];
    [friendCache prefetchAndCacheForSession:nil];

    [FBWebDialogs presentRequestsDialogModallyWithSession:[FBSession activeSession]
                                                  message:[NSString stringWithFormat:@"I just posted an action - give me some points!"]
                                                    title:@"Get points from your friends"
                                               parameters:params
                                                  handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) 
                                                      if (error) 
                                                          // Case A: Error launching the dialog or sending request.
                                                          NSLog(@"Error sending request.");
                                                       else 
                                                          if (result == FBWebDialogResultDialogNotCompleted) 
                                                              // Case B: User clicked the "x" icon
                                                              NSLog(@"User canceled request.");
                                                           else 
                                                              NSLog(@"Request Sent.");
                                                          
                                                      
     friendCache:friendCache];

应用将加载对话框,但在 FBWebDialogs.m:93 处的 [FBWebDialogInternalDelegate completeWithResult:url:error:] 上崩溃:当您点击 X 按钮取消对话框或尝试发送请求时。

我是否需要添加任何依赖项、以某种新方式开始会话、链接他们在https://developers.facebook.com/docs/tutorial/iossdk/upgrading-from-3.2-to-3.5/ 中没有告诉您的内容或其他内容?

谢谢。

【问题讨论】:

【参考方案1】:

很确定在这种情况下,这是因为您没有在任何地方保留friendCache,并且它在 FBWebDialogs 尝试使用它之前被释放(例如当对话框被关闭时)。

如果您将friendCache 移动到类中的ivar 或属性而不是局部变量中,这应该可以工作。

【讨论】:

当你想到它时很明显......谢谢。【参考方案2】:

我在为项目启用 ARC 时遇到了同样的问题。

使用 ARC FBFrictionlessRecipientCache *friendCache 在方法结束时自动释放,但 Facebook SDK 在您按下窗口上的关闭/发送/取消按钮时需要它。

您必须将FBFrictionlessRecipientCache *friendCache 放在属性中或类的开头以保留变量。

@interface className ()

    FBFrictionlessRecipientCache *friendCache;

【讨论】:

以上是关于Facebook iOS SDK 3.5.1 好友请求对话框在关闭时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Facebook SDK 错误 Domain=com.facebook.sdk Code=5 在 ios 中获取好友列表时

如何使用 iOS Facebook SDK 获取所有 Facebook 好友列表

Facebook iOS sdk 好友列表返回空

如何使用 facebook ios sdk 发出好友请求?

如何从 Facebook iOS sdk 获取好友列表

IOS Facebook好友邀请在facebook sdk中不起作用