2012-08-15 4 views
7

私は、モーダルビューコントローラをrightBarButtonItemのクリックで表示しました。サンプルios-Facebook SDK 3.0 Error 5 When Posting Status Updateのように、このコントローラでFbLoginViewを使用しています。IOS FacebooSDK 3.0 FBLoginVIew inモーダルviewController

しかし、モーダルビューコントローラを複数回表示することができません。 私はViewDidUnloadでFBLoginViewをリリースしようとしましたが、モーダルビューコントローラを開くには2度目のアトムで常にクラッシュします。

答えて

1

私は同じ問題を抱えていました。

if(!yourFBLoginView) 
{ 
    yourFBLoginView = [FBLoginView alloc] init...]; 
} 

および/またはあなたのmodalViewControllerを却下するとき、あなたのアクティブなセッションを閉じることを忘れないでください:このような何かを追加してみてください。

if ([[FBSession activeSession] isOpen]) 
{ 
    [[FBSession activeSession] close]; 
} 
+0

私はモーダルを却下するとセッションを閉じるのは賢明ではないと思うので、ユーザーをログアウトすることができます。別の修正があるか、またはバグ – carbonr

5

すでに同じ問題が発生しており、すでに数日間対処しています。そして最後に、これは私の解決策です。

if (!FBSession.activeSession.isOpen) { 
    theLoginView = [[FBLoginView alloc] init]; 
    theLoginView.frame = CGRectOffset(theLoginView.frame, 
             ([[UIScreen mainScreen] bounds].size.width-theLoginView.frame.size.width)/2, 
             ([[UIScreen mainScreen] bounds].size.height-theLoginView.frame.size.height)/2 -50); 
    theLoginView.delegate = self; 
    [self.view addSubview:theLoginView]; 
    [theLoginView sizeToFit]; 
} 
//Only close the session when application is terminating, this will save the token information: 
- (void)applicationWillTerminate:(UIApplication *)application { 
    [FBSession.activeSession close]; 
} 

//And keep the FBSession within the app until the user want to logout: 
[FBSession.activeSession closeAndClearTokenInformation]; 

私の今のところ、完全にうまく動作しています。この助けを願っています。

+0

の下にこれを提出する必要があります。これは私にとっても完璧に機能します!実際には、たとえあなたが1つのビューでログアウトしてもう一方のログインでもログインしても機能します。トークン情報をどこでも閉じてクリアする必要はありませんでした。 – Paulo

3

FB SDKでは、複数のFBLoginViewを作成していないようです。おそらく、セッションを正常に終了することはできますが、LoginViewを一度作成しておくだけで簡単に見つけられます。

は、次のように私はこれをしなかった:私の.mモーダルビューコントローラファイル内

1)は、私が作成した静的変数

static FBLoginView* loginView; 

2)の代わりに、私のviewDidLoadにモーダルビューコントローラをロードする場合

FBLoginView *loginview = [[FBLoginView alloc] initWithPermissions: 
          [NSArray arrayWithObject:@"status_update"]]; 
loginview.frame = CGRectOffset(loginview.frame, 10, 10); 

私はこのように、そのが既に初期化された場合に見つけるためのチェックを追加しました:

if (!loginView) { 
    loginView = [[FBLoginView alloc] initWithPermissions: 
           [NSArray arrayWithObject:@"status_update"]]; 
    loginView.frame = CGRectOffset(loginView.frame, 10, 10); 

} 

これ以外にも、私はFBのHelloFacebookプロジェクトの例に従っています。

かなりコードではありませんが、動作するようです。

0

私は私のための答え(言われたことの変形が)私が持っているために必要なことだけだったと思う:

(void)applicationWillTerminate:(UIApplication *)application

機能:中

[FBSession.activeSession closeAndClearTokenInformation];

。具体的に私の問題は、私がテストしている間に...私は実際にFBSessionを破壊することなく実際にログアウトせずにアプリケーションを終了させて​​いたので、私が変更したものをテストするためにアプリに戻ったときユーザーはまだログインしていたため、一部の条件が正しく満たされていませんでした。私は、この問題を回避するためにアプリケーションが終了するたびにセッションをクリアするために、これはテストしている人にとっては非常に重要だと思う(そして、とにかくそこにその行を入れるべきだと思っている)...私は想像できる私のアプリがちょうど誰かに墜落し、今度は再オープンし、セッションが決してクリアされなかったのでクラッシュを経験するシナリオです。

関連する問題