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 中获取好友列表时