我正在制作一个应用程序,我需要在其中集成一个 facebook 共享(提要)对话框。我在https://developers.facebook.com/docs/mobile/ios/build/上阅读了所有内容,并且在应用程序完成启动后,我能够加载 facebook 共享(提要)对话框。但我的问题是我使用的是 xcode 4.3 即故事板,我想在按钮操作上加载 facebook 提要对话框。
我制作了另一个视图控制器并粘贴了 AppDelegate 函数的所有内容
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
在其中-(void) viewDidload
并能够加载“登录页面”,然后是我的“Facebook 应用程序”页面。
之后,当我允许我的 Facebook 应用程序获得许可时,它不会显示“提要对话框”
这是我的 viewController.h 文件
#import "FBConnect.h"
@interface ViewController : UIViewController<FBSessionDelegate,FBDialogDelegate>
{
Facebook *facebook;
}
@property (nonatomic, retain) Facebook *facebook;
@end
- 这是我的 ViewController.m 文件
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize facebook=_facebook;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
facebook = [[Facebook alloc] initWithAppId:@"284727404938450" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![facebook isSessionValid]) {
[facebook authorize:nil];
}
}
- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
[facebook dialog:@"feed" andDelegate:self];
}
但这里有两种在 AppDelegate 文件中使用的方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [ facebook] handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [ facebook] handleOpenURL:url];
}
我知道在 xib 中这些方法应该是:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[_ViewController facebook] handleOpenURL:url];
}
// For iOS 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[_ViewController facebook] handleOpenURL:url];
}
这些方法负责为当前的“facebook”实例(Facebook *facebook)弹出一个提要对话框。
我的问题是在情节提要中我们没有“窗口”和视图控制器实例,所以我的猜测是我当前的视图控制器的“facebook”实例没有调用这两种方法。如何为我的“facebook”实例调用这两个函数,其中我的 viewController 不是 AppDelegate 文件的实例?
请帮帮我。