2012-02-10 37 views
0

我知道關於該主題的線程有很多,我試過每一個選項。但沒有任何工作。iPhone objective c如何選擇在應用程序啓動時加載哪個視圖控制器

所以,在這裏,我有一個loginviewcontroller和一個tabbarviewcontroller。如果設備已經註冊,則應該出現標籤欄,如果不是登錄視圖。我有tabbarviewcontoller作爲故事板中的初始視圖控制器。如果設備已註冊,這將起作用。 這是我基本上做到:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

//define viewcontroller 
LoginViewController *loginviewcontroller = [[LoginViewController alloc]init]; 

//check if device id in coredata 
NSString *deviceId = [self retrieveFromUserDefaults:cKey_DeviceId]; 
if(deviceId == nil){ 
    NSLog(@"device not registered"); 
    [self.window setRootViewController:loginviewcontroller]; 
    [self.window addSubview:loginviewcontroller.view]; 
} 

//show them 
[self.window makeKeyAndVisible]; 

return YES; 

}

我在loginview viewDidLoad方法一的NSLog輸出,所以我知道,那一個LoginView被加載。但屏幕是黑色的!我不知道爲什麼。 viewcontroller運行viewdidload方法,但沒有屏幕輸出。

我該怎麼做錯???

感謝 多米尼克

+0

NSLog(@「device not registered」);你在日誌中得到了這個嗎? – hchouhan02 2012-02-10 12:15:07

+0

你肯定有'窗口'連線了嗎?如果你的NSLog(@「%@」,self.window)''那麼你會得到有意義的輸出嗎? – Tommy 2012-02-10 12:25:56

+0

是的,我得到日誌「設備未註冊」! – 2012-02-10 13:08:35

回答

0

如果LoginViewController擁有的.xib文件,你調用了錯誤的init方法。你需要initWithNibName:bundle:方法。

另外,在設置根視圖控制器後,不需要調用[self.window addSubview:loginviewcontroller.view];

如果deviceId不爲空,那麼您將會看到一個空白屏幕。

而loginviewcontroller正在泄漏內存。將它設置到根視圖控制器後,您應該釋放它。

+0

嗨,我正在使用stroyboard,所以沒有.xib文件只爲loginviewcontroller。我們需要的是,這不是我想要類似的東西的第一個應用程序。最後一次使用ios4和沒有故事板是更容易。 – 2012-02-10 19:21:51

+0

順便說一句:儘管如此,由於ARC,使用sdk5的ios4.2不允許發佈。 – 2012-02-10 19:25:11

0

在大多數情況下使用密碼,我發現最好加載初始(已登錄)屏幕,然後檢查是否需要登錄。如果是,立即建立一個登錄屏幕作爲模態視圖。在初始屏幕中從viewDidLoad啓動登錄屏幕。

+0

好主意,明天我會試試,謝謝。有時,當你是如此「陷入」一個問題,你只是沒有看到別的東西;) – 2012-02-10 23:36:10

+0

哪種方法最適合彈出模態視圖? viewdidload或viewwillapear?或任何其他建議? – 2012-02-11 09:12:26

+0

你正在尋找的電話是presentModalViewController:animated: – 2012-02-12 04:00:31

相關問題