Iphone 在选项卡栏控制器前显示登录屏幕
我正在做一个Twitter应用程序,在AppDelegateIphone 在选项卡栏控制器前显示登录屏幕,iphone,cocoa-touch,ios,Iphone,Cocoa Touch,Ios,我正在做一个Twitter应用程序,在AppDelegate-didFinishLaunchingWithOptions上,如果该对象上的NSUserDefaults为空,我将使用下一个代码加载登录视图: NSUserDefaults*prefs=[NSUserDefaults standardUserDefaults] NSString *test = [prefs objectForKey:@"username"]; if (test == @"(null)" || test == nil)
-didFinishLaunchingWithOptions
上,如果该对象上的NSUserDefaults为空,我将使用下一个代码加载登录视图:
NSUserDefaults*prefs=[NSUserDefaults standardUserDefaults]
NSString *test = [prefs objectForKey:@"username"];
if (test == @"(null)" || test == nil) {
LoginScreenViewController *login = [[LoginScreenViewController alloc] initWithNibName:@"LoginScreenViewController" bundle:nil];
[self.window addSubview:login.view];
[self.window makeKeyAndVisible];
} else {
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
}
我可以加载登录视图,但是我怎么才能取消它呢?登录屏幕必须在加载tabBarController之前显示,因此当登录控制器完成时,tab bar控制器将启动,就好像它之前没有任何其他视图一样。提前谢谢 如果用户登录或未登录,您可以加载相同的选项卡栏(if语句的第二部分) 如果用户未登录,则可以将LoginScreenViewController显示为模式视图控制器。这将位于选项卡栏控制器的上方 差不多
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
NSString *test = [prefs objectForKey:@"username"];
if (test == @"(null)" || test == nil) {
LoginScreenViewController *login = [[LoginScreenViewController alloc] initWithNibName:@"LoginScreenViewController" bundle:nil];
[tabBarController presentModalViewController:login animated:YES];
}
我不确定这是否能解决您的问题,但不要使用==进行字符串比较。使用
NSString
类的compare:
方法
if ([myNSStringObject compare:anotherNSStringObject] == NSOrderedSame) {
//proceed with processing based on resultant matched strings
}
else {
//proceed with processing based on resultant non-matched strings
}
不确定这是否会产生影响,但随着您的程序变得更加复杂,如果不这样做,您可能会遇到麻烦。登录完成后,调用:
[login.view removeFromSuperview];
[self.window addSubview:tabBarController.view];
应该只有一个UIView属于添加到窗口的UIViewController,但如果删除该视图,则可以添加另一个视图。可以将loginview显示为模型弹出窗口。 这就是我正在做的
loginView = [[[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil] autorelease];
UINavigationController* nav = (UINavigationController*)[tabBarController.viewControllers objectAtIndex:0];
loginView.navC = nav; [nav presentModalViewController:loginView animated:YES];
if(test==nil)
应该是一个充分的测试,test==@“(null)”
是一个将为false的直接指针比较。如果您想要一个与nil不同的null,请使用[NSNull null]
进行赋值和比较。谢谢您的建议!行!不要将用户凭据存储在NSUserDefaults中,如果要持久化凭据,则应使用keychain服务。@Flash84x可以,谢谢您的建议:)GitHub上有一个非常不错的开源keychain服务包装器,下面是一篇关于它的博客文章。我建议使用它来减少开发时间。这是可行的,但是tabBarController是在登录视图之前加载的。我认为这可以通过使用任何回调来解决,以了解登录视图是否已被取消,但我不知道如何在FirstViewController上调用重载函数,因为我尝试了[self.parentViewController updateStream:nil]
和[FirstViewController updateStream:nil]代码>(其中updateStream是一个iAction),两者都给了我一个sigabti,我在点击登录后得到了一个白色屏幕:(为什么不甚至[someString IsequalString:anotherString]?)更简化了这一点