我已经将我的应用程序的初始视图与storyboard设置为主视图。我在app委托中有这段代码,如果用户还没有登录,它应该加载登录VC:
if (currentUser) {
// do stuff with the user
//use storybaord nibs
} else {
// show the signup or login screen
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"loginVC"];
}
问题是我没有currentUser
的逻辑。这只是个suedo代码。我怎样才能正确地设置它?
这是我在实际登录VC中使用的代码,用于登录用户。我保存用户名/通行证到NSUserDefaults
。
-(IBAction)loginButtonPressed:(id)sender{
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://myapp.com/20111115/60b88126/login_user/"]]];
[request setPostValue:self.usernameTextField.text forKey:@"username"];
[request setPostValue:self.passwordTextField.text forKey:@"password"];
[request startSynchronous];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:self.usernameTextField.text forKey:@"login"];
[userDefaults setObject:self.passwordTextField.text forKey:@"password"];
NSError *error = [request error];
NSString *responseString = nil;
if (!error) {
responseString = [request responseString];
} else {
responseString = @"Failed to connect to server, please check your WiFi or 3G connection.";
}
NSDictionary *responseDictionary = [responseString JSONValue];
NSString *loginProblems = [responseDictionary valueForKey:@"login_errors"];
if (![loginProblems isEqualToString:@""]) {
//Invalid login
} else {
[self performSegueWithIdentifier:@"login" sender:self];
}
}
你能检查一下NSUserDefaults是否有用户名/密码的值,然后从那里开始吗?您只需要确保在他注销时清除这些值。
如果NSUserDefaults的username/password字段是空的,发送他到登录。如果它有值,"做一些事情"。当他退出时,清除这些值吗?
或者在AppDelegate中创建一个即时变量来声明他是否登录了?
在应用委托中创建变量,就像一个普通的实例变量一样,然后使用:
InspectAppDelegate *dataCenter = (InspectAppDelegate *) [[UIApplication sharedApplication] delegate];
在不同的视图控制器中访问它(需要在你使用它的任何方法中声明它)