我想在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
的目的。
感谢。
答案 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去调用委托并发现它为零或捕获错误时,它将不会回调。