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?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上将 FBConnect SDK 升级到 FacebookSDK 3.0 时缺少 FBRequestDelegate
FBRequestDelegate didReceiveResponse 如何找出这个响应是啥请求
为啥我的 charFormat 样式仅适用于选择,并且仅适用于特定方向的选择?
WebRTC connectionState 停留在“new” - 仅适用于 Safari,适用于 Chrome 和 FF