2013-03-21 86 views
0

我正在使用Facebook SDK 3.0为我的应用程序(基础SDK:iOS5)和使用美味应用程序(示例应用程序)作为教程。 Facebook没有公开会话的情况下,以模态方式呈现登录视图控制器。但它没有被模态地呈现。这是代码;从AppDelegate调用presentModalViewController不起作用

- (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被showLoginView称为showLoginView
  • viewDidLoad方法分配
  • 的navigationController的通话
  • RootViewController之后被调用,topViewController不为零(这是什么是应该是:RootViewController
  • navigationController是一类UINavigationController(非定制)
  • loginViewControllerFacebookLoginViewController)的init方法被调用,而不是它的viewDidLoad方法)

日志输出:

2013年3月21日20:01:28.729 RootViewController的:viewDidLoad中

2013-03 -21 20:01:28.735 FacebookLoginViewController:Allocated

+0

presentModalViewController:animated:已被弃用。尝试使用presentViewController:代替。 – AMayes 2013-03-21 18:25:46

+0

仍然没有出现.. – Bartu 2013-03-21 18:30:36

回答

1

在您的topViewController中,声明FacebookLoginViewController的一个实例。 @property (nonatomic, strong) FacebookLoginViewController *fbVC;这将给viewController一个你想要呈现的控制器的引用。它分配但不呈现的原因是因为你的topViewController目前被要求提供一个它不属于它的对象。你需要传递它的所有权。

添加topViewController.fbVC = loginViewController;和改变[topViewController presentModalViewController:loginViewController animated:NO];[topViewController presentViewController:topViewController.fbVC animated:NO completion:nil];

+0

我试过presentViewController:animated:completion:,没有运气。我不明白为什么我应该强制模态视图控制器? – Bartu 2013-03-21 18:56:59

+0

我假设modalViewController是在你的topViewController中声明的。如果不是,则在您的topViewController中声明一个FacebookLoginViewController,并将其设置为appDelegate中的loginViewController,以便您的topViewController具有对它的引用。 – AMayes 2013-03-21 19:01:12

+0

我不应该声明它。 appdelegate拥有这部分代码的全部概念,以便任何viewcontroller都可以调用此视图。 – Bartu 2013-03-21 19:04:34

5

尝试迫使你的UI代码在主线程上运行:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [topViewController presentModalViewController:loginViewController animated:NO]; 
}); 
0

假设你把你的应用程序的窗口的引用,你应该叫[self.window.rootViewController present...]
另外请注意,当另一个VC已经以模态方式呈现时,它可能不起作用(取决于您的目标iOS版本 - 实际上,您应该使用presentViewController:animated:completion:而不是使用“m odal“措词)

相关问题