2012-03-27 54 views
0

我想在我的应用程序代码中实现Facebook API。 Pratically我有一个简单的TabbarController与2 ViewController。tabbarcontroller和facebook api

我的AppDelegate代码:

@interface AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> { 
    UIWindow *window; 
    UITabBarController *tabBarController; 
    Facebook *facebook; 
} 

@property (retain, nonatomic) IBOutlet UIWindow *window; 
@property (retain, nonatomic) IBOutlet UITabBarController *tabBarController; 
@property (retain, nonatomic) Facebook *facebook; 

方法的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [self.window addSubview:self.tabBarController.view]; 
    [self.window makeKeyAndVisible]; 
    facebook = [[Facebook alloc] initWithAppId:@"12345678910" andDelegate:_tabBarController]; 
    ............ 

return YES; 
} 

FirstViewController.h

#import "Facebook.h" 
@interface FirstViewController : UIViewController <FBRequestDelegate, FBDialogDelegate, FBSessionDelegate> { 
} 

FirstViewController.m

#import "Appdelegate.h" 

-(IBAction)shareFacebook { 
    AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    if (![appdelegate.facebook isSessionValid]) { 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"publish_stream", 
          @"read_stream", 
          nil]; 
    [appdelegate.facebook authorize:permissions]; 
    [permissions release]; 
    } 
} 

我收到此代码警告:“andDelegate:_tabBarController” 发送“的UITabBarController *”,以不兼容的类型“ID”

+0

准确的警告是什么? – 2012-03-27 17:51:58

+0

发送“的UITabBarController *”,以不兼容的类型的参数“ID ” – 2012-03-27 17:55:13

+0

FBSessionDelegate在FirstViewController.h,不需要AppDelegate.h – 2012-03-27 18:02:57

回答

0

我想说的UITabBarController *不是FBSessionDelegate ...添加参数协议作为<UIApplicationDelegate, UITabBarControllerDelegate,FBSessionDelegate >然后

facebook = [[Facebook alloc] initWithAppId:@"12345678910" andDelegate:self]; 
+0

FBSessionDelegate在FirstViewController.h还声明所使用的,不需要AppDelegate.h – 2012-03-27 18:05:35

+1

然后你应该传递一个FirstViewController而不是TabBarController – 2012-03-27 19:05:43

0

在我的应用我声明和初始化一个Facebook对象中的AppDelegate就像你一样。不过,我让AppDelegate使用这些(就像其他答案所说的那样):FBRequestDelegate,FBDialogDelegate,FBSessionDelegate。之后,我将所有的Facebook登录/注销/ post..etc方法放在应用程序委托类中。

之后,您可以将facebook对象从didFinishLaunchingWithOptions传递给FirstViewController。

如果你不明白让我知道我会给你更多的细节。我可能不会很好地解释它。

PS:我可能是错误的,但是从我在网上看到的情况来看,更容易在应用程序delagete didfinishlaunchingwithoptions的开头声明方法,然后将它们传递给特定的视图控制器。

+0

谢谢你的回复。我有多个ViewController与“共享FB按钮”。我必须在Appdelegate中插入所有的方法facebook?以及如何检索我的视图控制器中的方法? – 2012-03-27 18:11:19

+0

Y你把所有东西都放在AppDelegate中,然后你在你的didFInishLaunchingWithOptions中将facebook对象传递给你的视图控制器: 'code' facebook = [[Facebook alloc] initWithAppId:@“put你的应用程序ID在这里“andDelegate:self]; UITabBarController * tabBarController =(UITabBarController *)self.window.rootViewController; FirstViewController * first = [[tabBarController viewControllers] objectAtIndex:0]; first.myFacebookPointer = facebook; 'code' 当然,在FirstViewController中创建一个Facebook属性,您将执行此任务。 – 2012-03-27 18:23:06

+0

'facebook = [[Facebook的alloc] initWithAppId:@“把你的应用程序ID在这里”andDelegate:self]; UITabBarController * tabBarController =(UITabBarController *)self.window.rootViewController; FirstViewController * first = [[tabBarController viewControllers] objectAtIndex:0]; first.myFacebookPointer = facebook;' – 2012-03-27 18:30:47