2012-03-27 51 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