2013-04-13 52 views
0

我正在使用GLSprite基本代碼。我有一個EAGLAppDelegate和一個EAGLView。我嘗試添加一個navController變量委託:如何從基於OpenGLES的應用程序調用presentViewController?

// AppDelegate.h 
@property (nonatomic, strong) UINavigationController *navController; 
// AppDelegate.m 
@synthesize navController = _navController; 

,然後執行以下操作中的touchesBegan(用於測試),但navController爲NULL,似乎沒有什麼?我怎樣才能解決這個問題?

GLSpriteAppDelegate *ad = (GLSpriteAppDelegate *)[[UIApplication sharedApplication] delegate]; 

SLComposeViewController *fbController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 
SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){ 
    [fbController dismissViewControllerAnimated:YES completion:nil]; 
    switch(result){ 
     case SLComposeViewControllerResultCancelled: 
     default: 
      NSLog(@"Cancelled....."); 
      break; 
     case SLComposeViewControllerResultDone: 
      NSLog(@"Posted...."); 
      break; 
    }}; 
//[fbController addImage:[UIImage imageNamed:@"1.jpg"]]; 
[fbController setInitialText:@"Test message"]; 
[fbController addURL:[NSURL URLWithString:@"http://www.test.com"]]; 
[fbController setCompletionHandler:completionHandler]; 
[ad.navController presentViewController:fbController animated:YES completion:nil]; 
+0

您是否創建了'navController'? –

+0

你似乎沒有在任何地方分配你的導航控制器。 – foundry

+0

我以爲@synthesize navController = _navController;正在將基類變量複製到本地或某個地方,我想不是。 – Rasterman

回答

0

這是不夠的,添加一個變量,你必須把裏面的東西......

你的導航控制器(navController)是nil因爲你沒有指定任何東西給它。另外請注意,如果您希望顯示控制器,則導航控制器必須位於屏幕上。

通常,您應該從當前控制器提供一個控制器。如果您正確構建您的類,則您具有用於在控制器類中呈現控制器的代碼。但是,您始終可以通過以下方式訪問窗口根控制器:

[ad.window.rootViewController presentViewController:...] 
+0

感謝您的幫助,我使用了ad.window.rootViewController,它不會崩潰,但它也沒有做任何事情,ad.window.rootViewController的值是有效的。這是在iOS 6.1模擬器上。如果我的遊戲正在顯示,那麼我假設ad.window.rootViewController在屏幕上?是否有我應該檢查的返回值,我應該如何繼續? – Rasterman

相關問題