FBRequestDelegate仅适用于AppDelegate?

时间:2010-12-29 00:17:29

标签: ios facebook facebook-ios-sdk uiapplicationdelegate

我想在FacebookFacade课程中封装我所有的Facebook互动,以保持干净整洁。我在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的目的。

感谢。

3 个答案:

答案 0 :(得分:7)

今天下午有同样的问题。终于解决了它: 你必须从MAIN线程中进行FBRequest。 否则,基础NSURLConnect(在facebook对象中)永远不会启动。

答案 1 :(得分: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]; 
}

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

答案 2 :(得分:1)

确保在Facebook在后台运行时未释放初始对象。如果是,当facebook去调用委托并发现它为零或捕获错误时,它将不会回调。