2012-03-27 5 views
0

Я пытаюсь реализовать API Facebook в своем коде приложения. 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 *» для параметра несовместимого типа «ид»

+0

Какое предупреждение точно? –

+0

Отправка «UITabBarController *» для параметра несовместимого типа «идентификатор » –

+0

FBSessionDelegate используется в FirstViewController.h, не требуется, чтобы AppDelegate.h –

ответ

0

я бы сказал UITabBarController * не является FBSessionDelegate ... добавить протокол, как <UIApplicationDelegate, UITabBarControllerDelegate,FBSessionDelegate >, а затем

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

FBSessionDelegate пока объявлен в FirstViewController.h, не нужно AppDelegate.h –

+1

тогда вы должны передать FirstViewController, а не TabBarController –

0

в моем приложении я объявляю и инициализировать объект facebook в AppDelegate как и вы. Тем не менее, я сделал AppDelegate использовать их (точно так же, как сказал другой ответ): FBRequestDelegate, FBDialogDelegate, FBSessionDelegate. После этого я разместил все методы входа/выхода в систему facebook/post..etc в классе делегатов приложения.

После этого вы можете просто передать объект facebook в свой FirstViewController из файла didFinishLaunchingWithOptions.

Если вы не понимаете, дайте мне знать, я дам вам более подробную информацию. Я не могу объяснить это очень хорошо.

PS: Возможно, я ошибаюсь в этом, но из того, что я видел по всему миру, проще всего объявить методы в начале приложения delagete, а затем передать их конкретным контроллерам представлений.

+0

Спасибо за ответ. У меня есть несколько ViewController с кнопкой «Поделиться FB». Я должен вставить весь метод facebook в Appdelegate? И как получить метод в моем контроллере просмотров? –

+0

YEs вы помещаете все в AppDelegate, если хотите, и затем передаете объект facebook своему контроллеру (-ам) выбора, подобному этому, в вашем файле didFInishLaunchingWithOptions: 'code' facebook = [[Facebook alloc] initWithAppId: @" put ваш идентификатор приложения здесь "andDelegate: self]; UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; FirstViewController * first = [[tabBarController viewControllers] objectAtIndex: 0]; первый.myFacebookPointer = facebook; 'code' Конечно, в FirstViewController создайте свойство facebook, которому вы будете выполнять задание. –

+0

'facebook = [[Facebook alloc] initWithAppId: @« поместите свой идентификатор приложения здесь »иDelegate: self]; UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; FirstViewController * first = [[tabBarController viewControllers] objectAtIndex: 0]; first.myFacebookPointer = facebook; ' –