我已成为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方法中充分利用“委托:”参数?我不确定我是否理解得很清楚。
谢谢, 马特
答案 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