FBRequestDelegate 仅适用于 AppDelegate?

Posted

技术标签:

【中文标题】FBRequestDelegate 仅适用于 AppDelegate?【英文标题】:FBRequestDelegate only works on AppDelegate? 【发布时间】:2010-12-29 00:17:28 【问题描述】:

我想将我所有的 Facebook 交互封装在一个 FacebookFacade 类中,以保持事情干净整洁。我的FacebookFacade 中有一个ios SDK Facebook 类的实例。

我的问题是当我在facade内进行Graph API调用时,例如:

    [self.facebook requestWithGraphpath:@"me" andDelegate:self]; 

FBRequestDelegate 唯一被调用的方法是 requestLoading:,仅此而已。我曾尝试将类似的代码放在其他地方,例如控制器和其他模型中,但也不是所有的FBRequestDelegate 方法都被调用,只有requestLoading:

事实上,我可以调用其他FBRequestDelegate 方法的唯一方法是将我所有的Facebook 逻辑放在AppDelegate 中,并将我的AppDelegate 设为FBRequestDelegate

为什么会这样?我在这里错过了什么吗?我绝对不想使用AppDelegate 作为我的FBRequestDelegate,因为我不想混淆AppDelegate 的用途。

谢谢。

【问题讨论】:

【参考方案1】:

今天下午遇到了同样的问题。终于解决了: 您必须从主线程发出 FBRequest。 否则底层 NSURLConnect(在 facebook 对象中)永远不会启动。

【讨论】:

天哪,这救了我。我花了很长时间调试这个 facebook 请求。为什么他们的文档中没有提到这一点? 我认为它与 NSURLConnection 和 Run 循环更相关。但他们应该建议在主线程上执行图形请求。【参考方案2】:

您可以与应用程序中的其他控制器共享您的 appDelegate。

我通过将我的 AppDelgate(它在其中实例化并分配 facebook 对象)导入我的界面解决了这个问题,即

#import "MyAppDelegate.h"

interface MyViewController: UIViewController <FBRequestDelegate, FBDialogDelegate, FBSessionDelegate>

这样,我可以创建一个指向委托对象的指针,并在需要的地方使用 facebook 方法。

-(void) someFunction
      MyAppDelgate *sharedAppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]
      [sharedAppDelegate.facebook dialog:@"feed" andDelegate:self]; 

如果这不起作用,请告诉我

【讨论】:

我试过了,我的视图控制器中的代表仍然没有被调用!你究竟是如何在委托中设置你的 facebook 以便你可以在视图控制器中使用它的?【参考方案3】:

确保当 facebook 在后台工作时初始对象没有被释放。如果是,当 facebook 去调用 delegate 并且发现它为 nil 或捕获错误时,它不会回调。

【讨论】:

以上是关于FBRequestDelegate 仅适用于 AppDelegate?的主要内容,如果未能解决你的问题,请参考以下文章

Apache重写规则仅适用于新连接

在 iOS 上将 FBConnect SDK 升级到 FacebookSDK 3.0 时缺少 FBRequestDelegate

FBRequestDelegate didReceiveResponse 如何找出这个响应是啥请求

为啥我的 charFormat 样式仅适用于选择,并且仅适用于特定方向的选择?

WebM 也适用于音频,还是仅适用于视频?

WebRTC connectionState 停留在“new” - 仅适用于 Safari,适用于 Chrome 和 FF