5

我想将我所有的 Facebook 交互封装在一个FacebookFacade类中,以保持事物干净整洁。我的FacebookFacade.

我的问题是,当我在外观中进行 Graph API 调用时,例如:

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

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

事实上,我可以调用其他方法的唯一方法是将我所有的FBRequestDelegateFacebook 逻辑放入. AppDelegateAppDelegateFBRequestDelegate

为什么会这样?我在这里错过了什么吗?我绝对不想使用AppDelegateas myFBRequestDelegate因为我不想混淆AppDelegate.

谢谢。

4

3 回答 3

7

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

于 2011-10-10T14:24:59.977 回答
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]; 
}

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

于 2011-06-01T19:34:45.777 回答
1

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

于 2010-12-29T02:51:22.397 回答