1

Facebook 共有 (フィード) ダイアログを統合する必要があるアプリを作成しています。https://developers.facebook.com/docs/mobile/ios/build/ですべてのものを読み、アプリの起動が終了したときに Facebook 共有 (フィード) ダイアログを読み込むことができました。しかし、私の問題は、xcode 4.3、つまりストーリーボードを使用していて、ボタンアクションで Facebook フィードダイアログをロードしたいことです。

別のView Controllerを作成し、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 ファイルで使用される 2 つのメソッドを次に示します。

- (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) のフィード ダイアログをポップアップする役割を果たします。

私の問題は、ストーリーボードに「ウィンドウ」とビューコントローラーのインスタンスがないため、現在のviewControllerの「facebook」インスタンスに対してこれら2つのメソッドが呼び出されていないことです。私のviewControllerがAppDelegateファイルのインスタンスではない「facebook」インスタンスに対してこれら2つの関数を呼び出すにはどうすればよいですか?

私を助けてください。

4

4 に答える 4

0

1 つのソリューションとして、Facebook のデリゲート メソッドを AppDelegate に実装してから、viewController で viewDidLoad メソッド、または好みのメソッドを使用することができます。

AppDelegate *appDelegate= (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.facebook authorize:permissions];

アクセス許可は、必要なアクセス許可を持つ配列です。それはうまくいくはずであり、その方法

- (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]; 
 }

実行されます。

于 2012-04-04T15:36:36.167 に答える
0

「facebook」という名前の ivar と、「_facebook」という名前の別の ivar を作成する「facebook」という名前のプロパティを定義しているので注意してください。次に、コードでivar「facebook」を[_ViewController facebook]操作しているため、呼び出すと、初期化したivar「facebook」ではなく、プロパティ(ivar _facebook)にアクセスしています。

これはあなたが探していた答えではないと思いますが、指摘することは重要だと思われました。

幸運を!

于 2012-04-04T13:03:13.857 に答える
0

オンライン チュートリアルで指示されているように、いくつかの Facebook 関連のデリゲートが欠落しており、それらすべてをメイン アプリのデリゲートに入れていないようです。

https://developers.facebook.com/docs/mobile/ios/build/を参照してください

于 2012-04-04T13:56:23.347 に答える
0

Facebook を使用する (またはこれらのデリゲート関数を呼び出す) 前に、アプリ デリゲートの _viewcontroller でビュー コントローラーの参照を渡すことができます。

ビュー コントローラの viewdidload() は次のようになります。

-(void)viewDidLoad{ 



[[UIApplication sharedApplication] delegate]._viewComtroller = self; // pass reference to the appdalegate



//   Other code (or call the facebook function here) 

}

それは働くでしょう

于 2014-01-11T19:25:45.403 に答える