После того, как мой пользователь впервые заходит в мое приложение, я сохраняю информацию о его сеансе, чтобы позже вызвать ее, чтобы им не приходилось многократно регистрироваться.Тем не менее, в некоторых частях моего приложения я извлекаю данные из сеанса:
ViewController.m
NSString *amVerified = [session user][@"user"][@"field_checked_messages"][@"und"][0][@"safe_value"];
Как ни странно, в первый раз сеанс открывается, возвращаются следующие данные:
2019-02-08 13:05:59.651056-0800[4681:1246584] SHOW ME EVERYTHING {
sessid = "sesshere";
"session_name" = nameofsession;
token = "tokenhere";
user = {
access = 1549659837;
created = 1459875505;
data = {
"ckeditor_auto_lang" = t;
"ckeditor_default" = t;
"ckeditor_lang" = en;
"ckeditor_show_toggle" = t;
"ckeditor_width" = "100%";
"remember_me" = 0;
};
"field_address" = {
und = (
{
format = "<null>";
"safe_value" = "ADDRESS, Vancouver";
value = "ADDRESS, Vancouver";
}
);
};
"field_ambassador" = (
);
"field_checked_messages" = {
und = (
{
format = "<null>";
"safe_value" = "0 10) 9) 10) 10)";
value = "0 10) 9) 10) 10)";
}
);
};
И указанная выше строка NSString заполняется как следует.
Однако , если мой пользователь на какое-то время закрывает приложение и позже возвращается к приложению, а сеанс открывается заново, данные сеанса возвращают только половину того, что должны - например, он не возвращает ни одно из полей, связанных с'user':
2019-02-08 13:05:59.651056-0800[4681:1246584] SHOW ME EVERYTHING {
sessid = "sesshere";
"session_name" = nameofsession;
token = "tokenhere";
user = {
access = 1549659837;
created = 1459875505;
data = {
"ckeditor_auto_lang" = t;
"ckeditor_default" = t;
"ckeditor_lang" = en;
"ckeditor_show_toggle" = t;
"ckeditor_width" = "100%";
"remember_me" = 0;
};
И NSString amVerified (естественно) равно NULL.Кто-нибудь знает, почему пользовательские поля не возвращаются при повторном открытии приложения?Вот код, который я использую для повторного входа пользователя в приложение:
[DIOSUser userMakeSureUserIsLoggedInWithUsername:[keychain objectForKey:(id)kSecAttrAccount]
andPassword:[keychain objectForKey:(id)kSecValueData]
success:^(AFHTTPRequestOperation *op, id response) {
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:response] forKey:@"diosSession"];
[[NSUserDefaults standardUserDefaults] synchronize];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *yourViewController = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"tabBar"];
[self.navigationController pushViewController:yourViewController animated:YES];
UITabBarController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"tabBar"];
[viewController setSelectedIndex:0];
}
failure:^(AFHTTPRequestOperation *op, NSError *err) {
// failure(err);
}
];
}