2012-02-10 35 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

相关问题