Я использую KeychainItemWrapper
для сохранения учетных данных для входа, эта функция отлично работает для меня, но у меня есть несколько проблем с использованием этих сохраненных учетных данных.
Всегда мой первый просмотр — это вход в систему; первый раз отображается без учетных данных в текстовых полях, а в остальное время с учетными данными в текстовых полях. Что я могу сделать, чтобы проверить имя пользователя и пароль, хранящиеся в связке ключей, и автоматически перейти в главное меню приложения? Я так понимаю, что я хочу некий автологин, типичное поведение приложений. Если вам нужна дополнительная информация о какой-либо части проекта, пожалуйста, дайте мне знать.
PS. В следующих строках кода isUserLogged всегда возвращает FALSE.
AppDelegate
имеет:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
sleep(2);
[[UIApplication sharedApplication] setStatusBarHidden:NO];
LoginViewController *loginVC = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"login"];
NSString *identifier;
if(loginVC.isUserLogged == TRUE)
{
identifier=@"Menu";
}
else
{
identifier=@"Inicio";
}
UIStoryboard *storyboardobj=[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *screen = [storyboardobj instantiateViewControllerWithIdentifier:identifier];
[self.window setRootViewController:screen];
return YES;
}
LoginViewController
имеет:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
txtNick.delegate = self;
txtPass.delegate = self;
// Create instance of keychain wrapper
keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"login" accessGroup:nil];
// Get username from keychain (if it exists)
[txtNick setText:[keychain objectForKey:(__bridge id)kSecAttrAccount]];
// Get password from keychain (if it exists)
[txtPass setText:[keychain objectForKey:(__bridge id)kSecValueData]];
}
- (BOOL)isUserLogged
{
keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"nick" accessGroup:nil];
if ( [[keychain objectForKey:(__bridge id)kSecAttrAccount] isEqualToString:@""] ) {
return FALSE;
} else {
txtNick = [NSString stringWithString:[keychain objectForKey:(__bridge id)kSecAttrAccount]];
}
keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"pass" accessGroup:nil];
if ( [[keychain objectForKey:(__bridge id)kSecAttrAccount] isEqualToString:@""] ) {
return FALSE;
} else {
txtPass = [NSString stringWithString:[keychain objectForKey:(__bridge id)kSecValueData]];
}
return TRUE;
}