从AppDelegate调用presentModalViewController不起作用

Bar*_*rtu 0 iphone cocoa-touch ios

我正在为我的应用程序(基本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];
    }
}
Run Code Online (Sandbox Code Playgroud)

细节;

  • showLoginView是在application:didFinishLaunchingWithOptions:分配navigationController后调用和调用的
  • RootViewController该navigationController的调用viewDidLoad方法之前showLoginView
  • showLoginView,topViewController是不是零(这是什么是应该是:RootViewController)
  • navigationController是一种类UINavigationController(不是自定义的)
  • loginViewController调用(FacebookLoginViewController)的init方法,但不是它的viewDidLoad方法)

日志输出:

2013-03-21 20:01:28.729 RootViewController:viewDidLoad

2013-03-21 20:01:28.735 FacebookLoginViewController:已分配

man*_*sta 5

尝试强制您的UI代码在主线程上运行:

dispatch_async(dispatch_get_main_queue(), ^{
    [topViewController presentModalViewController:loginViewController animated:NO];
});
Run Code Online (Sandbox Code Playgroud)