我知道有很多关于这个主题的线索,我尝试了每一个选项。但什么都不管用。
我有一个登录视图控制器和一个选项卡视图控制器。如果设备已经注册,则应显示选项卡,如果不是loginview。我有选项卡视图控制器作为故事板中的初始视图控制器。如果设备已注册,则此操作有效。这就是我基本上要做的:
- (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视图didload方法中有一个NSlog输出,所以我知道loginview已经加载。但是屏幕是黑色的!!!我不知道为什么。viewcontroller运行viewdidload方法,但没有屏幕输出。
我做错了什么???
谢谢dominik
如果LoginViewController有一个.xib文件,那么您调用了错误的init方法。您需要initWithNibName:bundle:方法。
此外,在设置根视图控制器之后,不需要调用[self.window addSubview:loginviewcontroller.view];
。
如果设备ID不为空,那么您将得到一个空白屏幕。
并且loginviewcontroller正在泄漏内存。您应该在将其设置为根视图控制器之后释放它。
在大多数使用密码的情况下,我发现最好加载初始(已登录)屏幕,然后检查是否需要登录。如果是,请立即显示一个登录屏幕作为模式视图。在初始屏幕中从viewDidLoad启动登录屏幕。