1

FacebookのFacebookSDKチュートリアルを段階的に実行しました。fbDidLoginが呼び出される以外はすべて機能しています...認証プロセスは正常に機能します。私はするように言われました:

     - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
          return [[controller facebook] handleOpenURL:url];
     }

fbDidLoginから呼び出されません

問題は、ビューコントローラを初期化する方法が正確にわからないことです。これが私のアプリデリゲートの.hです:

#import <UIKit/UIKit.h>
#import "FBConnect.h"


@interface fb2AppDelegate : UIResponder  <UIApplicationDelegate, FBSessionDelegate> {

    Facebook *facebook; 
    UIViewController *fb2ViewController;
}

@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) Facebook *facebook; 
@property (nonatomic, strong) UIViewController *fb2ViewController;

@end

と.m:

#import "fb2AppDelegate.h"

@implementation fb2AppDelegate
@synthesize window = _window;
@synthesize facebook;
@synthesize fb2ViewController;


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

    self.fb2ViewController = [[UIViewController alloc] init];

    facebook = [[Facebook alloc] initWithAppId:@"key_here" 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];
    } 


    return YES;
}


- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [[fb2ViewController facebook] handleOpenURL:url];
}


- (void)fbDidLogin {

    NSLog(@"fbdidlogin"); 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"key_here", @"app_id",
                                   @"http://developers.facebook.com/docs/reference/dialogs/", @"link",
                                   @"http://fbrell.com/f8.jpg", @"picture",
                                   @"Facebook Dialogs", @"name",
                                   @"Reference Documentation", @"caption",
                                   @"Using Dialogs to interact with users.", @"description",
                                   nil];

    [facebook dialog:@"feed" andParams:params andDelegate:self];

}

ビューコントローラに関しては...私はそれらにコードを入れていません。

私が受け取っているエラーは次のとおりです。

'UIViewController'の表示された@interfaceはセレクター'Facebook'を宣言しません

私は何が間違っているのですか?

どうも!

4

2 に答える 2

2

問題は、ランタイムがUIViewControllerにクラスメソッド+ facebookがあると信じていることです。実際には、これは他の質問の回答が使用したシングルトンの例でした(混乱を招く可能性があります)。Facebookオブジェクトのインスタンスに送信し、そこからコードを呼び出す必要があります。

 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
      return [facebook handleOpenURL:url];
 }

また、デリゲートメソッドを呼び出すには、オブジェクトが実際にデリゲートである必要があることにも注意してください。したがって、コンパイラの警告を消すためfacebook.sessionDelegate = selfに、ヘッダーのプロトコルを設定して準拠します。<FBSessionDelegate>

于 2012-08-19T05:59:25.780 に答える
2

さて、あなたはする必要があります:

[facebook handleOpenURL:url]. 

現在facebook、オブジェクトの代わりにセレクターとして使用しています。

facebook.sessionDelegate = selfまた、..デリゲートメソッドfbDidLoginが呼び出されるように、を設定する必要があります。

お役に立てれば!

于 2012-08-19T06:12:13.553 に答える