Iphone Facebook SDK集成-使用视图控制器而不是应用程序委托

Iphone Facebook SDK集成-使用视图控制器而不是应用程序委托,iphone,facebook,facebook-graph-api,sdk,uiapplicationdelegate,Iphone,Facebook,Facebook Graph Api,Sdk,Uiapplicationdelegate,正如标题所示,我现在发现自己正在iOS应用程序中使用新的Facebook SDK 我遵循了Facebook开发者网站上概述的介绍,一切都按照它应该的方式进行——至少根据它们的实现 他们的工作方式意味着用户可以选择在调用ApplicationIDFinishLaunching后,通过应用程序委托中的一系列方法和调用,将其帐户连接到应用程序 相反,我只想在应用程序其他地方的视图控制器中选择一个按钮时强制执行此操作。也就是说,我不想在调用ApplicationIDFinishLaunching时处理授

正如标题所示,我现在发现自己正在iOS应用程序中使用新的Facebook SDK

我遵循了Facebook开发者网站上概述的介绍,一切都按照它应该的方式进行——至少根据它们的实现

他们的工作方式意味着用户可以选择在调用ApplicationIDFinishLaunching后,通过应用程序委托中的一系列方法和调用,将其帐户连接到应用程序

相反,我只想在应用程序其他地方的视图控制器中选择一个按钮时强制执行此操作。也就是说,我不想在调用ApplicationIDFinishLaunching时处理授权——我希望视图控制器中我自己的方法强制执行授权。此外,如果有什么不同的话,我将从我自己的一些视图控制器中引用Facebook类

我已经搜索了很多地方,但还没有找到一个完整的解决方案(或者任何真正的解决方案)。如果有人对此有什么想法,请告诉我。StackOverflow是大多数情况下的最后手段:)

编辑:正如下面提到的铍,我可以简单地将应用程序委托中的所有内容放入每个单独的视图控制器中。它是可行的,但这是处理这种独特情况的最佳方法还是需要更好的实现

谢谢,

相关代码如下:

sampleAppDelegate.h

@interface sampleAppDelegate : NSObject <UIApplicationDelegate,FBRequestDelegate, FBSessionDelegate, FBDialogDelegate, FBLoginDialogDelegate> {

Facebook *facebook;
}

@property (nonatomic, retain) Facebook *facebook;

@end
viewController.h

#import "FBConnect.h"
#import "sampleAppDelegate.h"

@class sampleAppDelegate;


@interface viewController : UIViewController <FBRequestDelegate> {
    Facebook *facebook;
        UnitedUpdatesAppDelegate *facebookSampleAppDelegate;


}
@property (nonatomic, retain) sampleAppDelegate *appDelegate;
@property (nonatomic, retain) Facebook *facebook;

如果您询问在AppDelegate以外的其他位置使用委托方法是否可能或更好,答案是肯定的

我的想法是准备一个包含FB所有内容的类,并有一个按钮,可以触发登录和/或身份验证

通常足以使控制器采用FB类所需的协议,并将其委托给回调


我尝试了类似的方法,效果很好。

我认为Facebook代码不应该是任何视图控制器的一部分。我更喜欢创建一个Singleton类来处理与Facebook的通信。此单例符合某个接口,使得向应用程序添加其他服务(如Twitter)更加方便(每个服务可以由符合共享接口的单独单例处理)

接口可以定义诸如-login:,-logout:,-postMessage:,即大多数服务共享的方法

singleton可以使用委托或块以类似的方式处理web服务响应,例如,在委托实现的情况下,可以调用一些方法-service:didSucceedWithStatus:或-service:didFailWithRor:(其中service参数将指示发送委托消息的服务或singleton实例的类型)


实际上,我确实根据上述描述编写了一些代码,如果您感兴趣,可以在这里发布。

您是否尝试使用Cmd+X和Cmd+V将appDelegate中的代码剪切并插入到您的VC中?铍,这是最好的方法吗?它确实有效——我在最初的帖子中没有提到我以前在这方面的尝试——但这是应该如何处理这种实现的吗?显然,这是我第一次使用Facebook API!,因此,我对他们的系统的了解可能没有我所希望的那么多。谢谢你的提示!我认为在一个地方工作的代码也可以在另一个地方成功工作。因此,如果你能毫无错误地传输代码,并且不会错过任何东西,那么一切都会好起来。嗨,沃尔夫冈,你能提供的任何和所有帮助都将是非常棒的,特别是当你处理过Facebook SDK之前出现的问题时。我当然喜欢你把所有的Facebook都放在一个班级里的想法,我很好奇你是如何管理它的。我非常感谢你的帮助!你能发布你的单例代码吗?我现在被这件事缠住了。谢谢。代码有点旧,可能有点问题,但它应该能让你大致了解如何实现这样的事情:-我希望我能在将来创建一个改进的版本(链接的代码是1,5年前编写的)。Ingconti,你能进一步指导我正确的方向吗?有没有一篇我错过的博客文章解释了这一点?我在如何将所有应用程序委托方法转换为自己的类方面遇到了困难。我会复制应用程序代理中的所有内容吗?真的那么简单吗?:)
#import "FBConnect.h"
#import "sampleAppDelegate.h"

@class sampleAppDelegate;


@interface viewController : UIViewController <FBRequestDelegate> {
    Facebook *facebook;
        UnitedUpdatesAppDelegate *facebookSampleAppDelegate;


}
@property (nonatomic, retain) sampleAppDelegate *appDelegate;
@property (nonatomic, retain) Facebook *facebook;
-(void) facebookPost {
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:

                                   @"http://stackoverflow.com", @"link",
                                   @"Message name", @"name",
                                   @"Caption", @"caption",
                                   @"Description", @"description",
                                   @"Message",  @"message",
                                   nil];

    [sampleAppDelegate dialog:@"feed" andParams:params andDelegate: sampleAppDelegate];
}