Facebook iOS SDK - 自定义代理

问题描述:

我正在与Facebook集成一个新项目。该应用程序必须向Facebook发出不同的请求。 SDK提供了一个处理每个请求的代理。现在我需要有一个自定义的委托来处理不同的请求。有人能告诉我如何做到这一点吗?Facebook iOS SDK - 自定义代理

Facebook类提供了许多返回FBRequest *对象的方法,并且每个方法都有一个委托参数,只要它符合FBRequestDelegate协议,委托就可以是任何对象。

因此,要么只是有一个自定义的类,它为每种类型的请求实现协议。或者,有一个实现协议的类,在这些方法中,您需要检查接收到的FBRequest以确定要执行的操作。因此,举例来说,如果你打电话:

Facebook *fb = [[Facebook alloc] initWithAppId:kYourFacebookAppId]; 
[params setObject:[NSNumber numberWithBool:YES] forKey:@"PostComment"]; 
[fb requestWithParams:params andDelegate:delegate]; 
[fb release]; 

然后在委托时,你可以这样做:

- (void)request:(FBRequest *)request didLoad:(id)result { 
    // Make a decision based on the request 
    if ([[request.params objectForKey:@"PostComment"] boolValue]) { 
     // Here we should post a comment. 

    } 
} 

不过,我个人不会做,因为它会要更难维护。更好的做法是为每个Facebook相关任务编写单独的类。这些类可以从一个基本的FBDelegate类继承,它执行常见的事情,如错误处理。

+0

感谢您的帮助!我会尝试你的建议。但是要明确一点:不可能从'[facebook requestWithGraphPath:@“me/albums”andDelegate:self]'调用某种方法;'? 对不起,但我是新来的目标C和Facebook的SDK – 2011-06-14 11:56:22

+0

好吧,所以,这是异步网络编程,(最初不容易)。所以,会发生的是,你调用requestWithGraphPath ...并将它传递给你的委托。一旦你调用它,程序就会继续,并且在某个时候,facebook对象将得到一个答案,并且你的委托方法将被调用并且结果。请阅读http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18 – 2011-06-14 12:15:43

+0

此外,通常情况下,您我们将在视图控制器中调用这个facebook请求,所以一般情况下,您需要将委托方法添加到该视图控制器的实现中,然后添加作为其协议之一。 – 2011-06-14 12:18:42