Как мне сохранить экземпляр Facebook в нескольких классах представлений IOS? - PullRequest
0 голосов
/ 28 марта 2011

Я уже давно читаю Stack Overflow и с нетерпением жду участия!На вопрос ...

Я программирую около 10 лет, но я новичок в программировании на iOS и Objective-C.

Я пытаюсь создать приложение, требующее входа в Facebook.Когда приложение открывается, ему нужно загрузить вид с логотипом и кнопкой входа в Facebook.Я могу сделать это и заставить его работать без проблем.После того, как они войдут в систему через Facebook, мое приложение отправит вызов API на мой сервер, аутентифицирует их в моей системе и отправит обратный вызов с их системными разрешениями.Если получится, что у них есть правильные разрешения для продвижения, они будут отправлены в представление с интерфейсом с вкладками.У меня также работает интерфейс с вкладками.

Я создал FirstViewController для обработки кнопки входа в Facebook и имею контроллеры представления для каждой вкладки.

В файле MyAppDelegate.m будет что-то вроде этого:1011 * Теперь мне нужно вызвать метод входа в Facebook в FirstViewController ...

[facebook authorize:nil delegate:self];

1) Как получить к нему доступ к экземпляру Facebook в MyAppDelegate?(Мне нужно иметь возможность доступа также и из всех других представлений.) Создаю ли я делегат / протокол для доступа к нему из MyAppDelegate?

2) Я делаю это невероятно идиотским способом?Если да, пожалуйста, помогите программисту-любителю встать на правильный путь.

3) Как правильно использовать аргумент «делегат:» в методе Facebook?Я не уверен, что понимаю это очень хорошо.

Спасибо, Мэтт

1 Ответ

1 голос
/ 28 марта 2011

Я никогда не использовал API Objective-C Facebook, но я могу дать вам некоторое представление о настройке глобального доступа к вашему экземпляру Facebook.Вы можете получить делегат приложения следующим образом:

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

Пока у вас есть открытый метод для доступа к facebook ivar / свойству MyAppDelegate, вы можете получить его следующим образом:

Facebook *theFacebook = [appDelegate facebook];

Это не даст вам никаких предупреждений, если вы #import "MyAppDelegate.h" где-то.

Что касается -authorize:delegate:, взгляните на Facebook.h ,Объект делегата, который вы передаете этому методу, должен реализовывать протокол FBSessionDelegate.

Более подробную информацию о делегировании можно найти в документации Apple по этому вопросу .

Редактировать

Чтобы быть действительно явным здесь, это то, что вы должны поместить в файл 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

// MyAppDelegate.m

#import "MyAppDelegate.h"
#import "Facebook.h"

@implementation MyAppDelegate

@synthesize window;
@synthesize tabBarController;
@synthesize facebook;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    /*...your implementation here...*/
}

/*...more methods...*/

@end
...