tabbarcontroller和facebook api
我想在我的应用程序代码中实现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”
我想说的UITabBarController *不是FBSessionDelegate ...添加参数协议作为<UIApplicationDelegate, UITabBarControllerDelegate,FBSessionDelegate >
然后
facebook = [[Facebook alloc] initWithAppId:@"12345678910" andDelegate:self];
FBSessionDelegate在FirstViewController.h还声明所使用的,不需要AppDelegate.h – 2012-03-27 18:05:35
然后你应该传递一个FirstViewController而不是TabBarController – 2012-03-27 19:05:43
在我的应用我声明和初始化一个Facebook对象中的AppDelegate就像你一样。不过,我让AppDelegate使用这些(就像其他答案所说的那样):FBRequestDelegate,FBDialogDelegate,FBSessionDelegate。之后,我将所有的Facebook登录/注销/ post..etc方法放在应用程序委托类中。
之后,您可以将facebook对象从didFinishLaunchingWithOptions传递给FirstViewController。
如果你不明白让我知道我会给你更多的细节。我可能不会很好地解释它。
PS:我可能是错误的,但是从我在网上看到的情况来看,更容易在应用程序delagete didfinishlaunchingwithoptions的开头声明方法,然后将它们传递给特定的视图控制器。
谢谢你的回复。我有多个ViewController与“共享FB按钮”。我必须在Appdelegate中插入所有的方法facebook?以及如何检索我的视图控制器中的方法? – 2012-03-27 18:11:19
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
'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
准确的警告是什么? – 2012-03-27 17:51:58
发送“的UITabBarController *”,以不兼容的类型的参数“ID” –
2012-03-27 17:55:13
FBSessionDelegate在FirstViewController.h,不需要AppDelegate.h – 2012-03-27 18:02:57