私は自分のアプリ(ベースSDK:iOS5)用にFacebook SDK 3.0を使用して作業しており、チュートリアルとしてScrumptiousアプリ(サンプルアプリ)を使用しています。Facebookのオープンセッションがない場合、ログインビューコントローラーがモーダルで表示されます。しかし、それはモーダルに提示されていません。これがコードです。
- (void)showLoginView {
UIViewController *topViewController = [self.navigationController topViewController]; // not nil, RootViewController kind of class
UIViewController *modalViewController = [topViewController modalViewController]; // nil since not modalviewcontroller exists
if (![modalViewController isKindOfClass:[FacebookLoginViewController class]]) {
FacebookLoginViewController *loginViewController = [[FacebookLoginViewController alloc] initWithNibName:@"FacebookLoginViewController" bundle:nil]; // allocated, no problem
[topViewController presentModalViewController:loginViewController animated:NO]; // not working????
} else {
FacebookLoginViewController* loginViewController = (FacebookLoginViewController*)modalViewController;
[loginViewController loginFailed];
}
}
詳細;
- showLoginViewはから
application:didFinishLaunchingWithOptions:
呼び出され、navigationControllerが割り当てられた後に呼び出されます RootViewController
呼び出される前のnavigationControllerの呼び出しviewDidLoad
メソッドのshowLoginView
- で
showLoginView
、topViewController
nilではありません(これは、あるべきものですRootViewController
:) - NavigationControllerは一種のクラスUINavigationControllerです(カスタムではありません)
loginViewController
(FacebookLoginViewController
)のinit
メソッドが呼び出されますが、そのviewDidLoad
メソッドは呼び出されません)
ログ出力:
2013-03-21 20:01:28.729 RootViewController:viewDidLoad
2013-03-21 20:01:28.735 FacebookLoginViewController:割り当てられました