iPhone目标c如何选择在app启动时加载哪个视图控制器

时间:2012-02-10 12:11:30

标签: iphone xcode4.2 xcode-storyboard rootview

我知道有很多关于该主题的主题,我尝试了每一个选项。但没有任何作用。

所以,这里有我的,一个loginviewcontroller和一个tabbarviewcontroller。如果设备已经注册,则应显示标签栏,如果不是登录视图。我将tabbarviewcontoller作为storyboard中的初始视图控制器。如果设备已注册,则此方法有效。 这就是我基本上做的事情:

- (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方法,但是没有屏幕输出。

我做错了什么???

感谢 多米尼克

2 个答案:

答案 0 :(得分:0)

如果LoginViewController有.xib文件,则调用错误的init方法。你想要initWithNibName:bundle:方法。

此外,设置根视图控制器后,无需调用[self.window addSubview:loginviewcontroller.view];

如果deviceId不为null,那么你将得到一个空白屏幕。

loginviewcontroller正在泄漏内存。您应该在将其设置为根视图控制器后将其释放。

答案 1 :(得分:0)

在大多数情况下使用密码,我发现最好加载初始(已登录)屏幕,然后检查是否需要登录。如果是,立即将登录屏幕作为模态视图。在初始屏幕中从viewDidLoad启动登录屏幕。