开发者

FBRequestDelegate only works on AppDelegate?

I want to encapsulate all my Facebook interactions within a FacebookFacade class to keep things clean and tidy. I have an instance of the iOS SDK Facebook class within my FacebookFacade.

My problem is that when I make a Graph API call within the facad开发者_开发百科e, such as:

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

The only method of FBRequestDelegate that gets called is requestLoading: and nothing else. I have tried putting similar code in other places, like in controllers and other models, and there too not all of the FBRequestDelegate methods get called, only requestLoading:.

In fact the only way I can get the other FBRequestDelegate methods to be called is to put all my Facebook logic in the AppDelegate and make my AppDelegate the FBRequestDelegate.

Why is this the case? Am I missing something here? I definitely do not want to use the AppDelegate as my FBRequestDelegate as I don't want to confuse the purpose of the AppDelegate.

Thanks.


Had the same problem this afternoon. Finally solved it: You HAVE TO make your FBRequest from the MAIN thread. Otherwise underlying NSURLConnect (in facebook object) never starts.


You can share your appDelegate with the other controllers in your application.

I solved this problem by importing my AppDelgate (which instantiates and allocates the facebook object in it) into my interface, i.e

#import "MyAppDelegate.h"

interface MyViewController: UIViewController <FBRequestDelegate, FBDialogDelegate, FBSessionDelegate>

This way, i can create a pointer to point to the delegate object and use the facebook methods in where i need to.

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

Let me know if this doesn't work


Make sure that the initial object is not being released while facebook is working in the background. If it is, when facebook goes to call the delegate and finds it nil or catches an error, it will not call back.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜