7

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

しかし、モーダル ビュー コントローラーを複数回表示できません。ViewDidUnload で FBLoginView を解放しようとしましたが、モーダル ビュー コントローラーを開こうとすると常にクラッシュします。

4

4 に答える 4

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

今のところ、私にとっては完全に正常に機能しています。この助けを願っています。

于 2012-08-18T18:14:38.027 に答える
3

FB SDK は、複数の FBLoginView を作成することを好まないようです。セッションを適切に終了すればできるかもしれませんが、LoginView を一度作成して保持する方が簡単であることがわかりました。

私はこれを次のようにしました:

1).mモーダルView Controllerファイルで、静的変数を作成しました

static FBLoginView* loginView;

2) my にモーダルビューコントローラーをロードするとき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 プロジェクトの例に従っただけです。

きれいなコードではありませんが、うまくいくようです。

于 2012-08-19T21:07:29.017 に答える
1

私も同じ問題を抱えていました。次のようなものを追加してみてください。

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

また、modalViewController を閉じるときは、アクティブなセッションを閉じることを忘れないでください。

if ([[FBSession activeSession] isOpen])
{
    [[FBSession activeSession] close];
} 
于 2012-08-17T11:34:02.200 に答える