如何在多个IOS视图类中保留Facebook实例?

时间:2011-03-28 04:57:42

标签: iphone objective-c facebook sdk protocols

我已成为Stack Overflow的读者已有一段时间了,我期待参与!关于这个问题......

我已经编程了大约10年,但对于iOS编程和我来说是全新的。 Objective-C的。

我正在尝试构建一个需要Facebook登录的应用程序。当应用程序打开时,它需要加载带有徽标和Facebook登录按钮的视图。我可以做到这一点,让它工作没有问题。在他们使用Facebook登录后,我的应用程序将向我的服务器发送API调用并使用我的系统对其进行身份验证,并使用其系统权限发回回调。如果它返回它们具有正确的推进权限,它们将被发送到带有选项卡式界面的视图。我也有标签界面工作。

我制作了一个FirstViewController来处理Facebook登录按钮,并为每个标签提供视图控制器。

在MyAppDelegate.m文件中将存在以下内容:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    //init facebook & send initial view with login button
    facebook = [[Facebook alloc] initWithAppId:@"MYAPPID"];
    [self.window addSubview:FirstViewController.view];
    [self.window makeKeyAndVisible];

    //Code to check permissions from webserver
    if (permissions && _isLoggedIn) {
    // Add the tab bar controller's view to the window and display.
    [self.window addSubview:tabBarController.view];
    [self.window makeKeyAndVisible];
    }
    else //access denied view
    return YES;
}

现在,我需要在FirstViewController中调用Facebook登录方法......

[facebook authorize:nil delegate:self];

1)如何在MyAppDelegate中访问Facebook实例? (我还需要能够从所有其他视图访问。)我是否创建了一个委托/协议来从MyAppDelegate访问它?

2)我这样做是一种令人难以置信的愚蠢行为吗?如果是这样,请帮助业余iOS程序员走上正确的道路。

3)如何在Facebook方法中充分利用“委托:”参数?我不确定我是否理解得很清楚。

谢谢, 马特

1 个答案:

答案 0 :(得分:1)

我从未使用过Facebook Objective-C API,但我可以帮助您深入了解如何设置对Facebook实例的全局访问权限。您可以这样访问应用代理:

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

只要你有一个公共方法来访问facebook的{​​{1}} ivar / property,你就可以这样做:

MyAppDelegate

只要你Facebook *theFacebook = [appDelegate facebook]; 在某处,这就不会给你任何警告。

关于#import "MyAppDelegate.h",请查看Facebook.h。传递给该方法的委托对象应实现-authorize:delegate:协议。

有关授权的更多信息,请查看Apple's documentation on the subject

修改

要明确地说明这一点,您应该在FBSessionDelegate文件中添加:

MyAppDelegate.h

// MyAppDelegate.h #import <UIKit/UIKit.h> @class Facebook; @interface MyAppDelegate : NSObject { UIWindow *window; UITabBarController *tabBarController; Facebook *facebook; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; @property (nonatomic, retain) Facebook *facebook; @end

MyAppDelegate.m