2013-03-21 100 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「措詞)