我是编程新手,我有一个启动时具有登录视图的应用程序,并要求用户输入他们在整个程序中使用的名称。一旦他们输入他们的名字并登录,他们就会看到主菜单视图。他们的名字是使用NSUserdefaults保存的。
他们的想法是,他们只需要登录一次(或者如果他们退出则再次登录),这样他们只应该在第一次运行应用程序时看到登录视图,但是一旦应用程序再次启动,它仍会显示登录屏幕,您也必须先按两次登录按钮才能进入主菜单。
我知道该应用程序正在存储详细信息,因为它被用于考虑应用程序,但我无法解决原因。这是我的代码。如果有人能提供帮助,我们将不胜感激。
-(IBAction)LogInButton:(id)sender
{
NSString *tempStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserName"];
if(tempStr.length==0)
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:Name.text forKey:@"UserName"];
[prefs synchronize];
LogInView *Logview = [[LogInView alloc] initWithNibName:@"LogInView" bundle:nil];
[self presentModalViewController:Logview animated:YES];
}
else
{
MainMenuView *mainview = [[MainMenuView alloc] initWithNibName:@"MainMenuView" bundle:nil];
[self presentModalViewController:mainview animated:YES];
}
}
答案 0 :(得分:3)
根据您的描述判断您想要的是
viewDidLoad
,查看用户是否已登录
MainMenu
LogInView
代码可能如下所示
- (void)viewDidLoad
{
[super viewDidLoad];
[self showCorrectController];
}
显示正确的控制器方法可能如下所示
- (void)showCorrectController
{
UIViewController *viewController = nil;
if ([self isLoggedIn]) {
viewController = [[MainMenuView alloc] init];
} else {
viewController = [[LogInView alloc] init];
}
[self presentModalViewController:viewController animated:YES];
[viewController release]; viewController = nil;
}
便捷方法称为isLoggedIn
,如下所示
- (BOOL)isLoggedIn
{
// The double negation just means we get a boolean response
return !![[NSUserDefaults standardUserDefaults] objectForKey:@"UserName"];
}
现在将原始方法编辑为类似
的内容-(IBAction)LogInButton:(id)sender
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:Name.text forKey:@"UserName"];
[prefs synchronize];
[self showCorrectController];
}
可以做很多事情来整理这个问题,但这应该是让你前进的开始。
关于你的命名的提醒。惯例是使用小写字母启动方法和变量名称。类和常量以大写字母开头。
答案 1 :(得分:0)
这似乎是第一次:
if(tempStr.length==0)
但我认为你没有显示所有代码。应用程序启动时会运行什么?