Как правильно работать (получать значения) с NSUserDefaults
-
03-07-2019 - |
Вопрос
В моем коде есть простой метод, который выглядит следующим образом:
- (BOOL)isFirstTimeLogin
{
NSString *t_gName =
[NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:kGroupIdentifierKey]];
if ([t_gName isEqualToString:@""] || t_gName == nil) {
DLog(@"LoginViewController, m:::isFirstTimeLogin, First time login happening.");
return YES;
}
DLog(@"LoginViewController, m:::isFirstTimeLogin, Not a first time login.");
return NO;
}
Просто перейдите в пакет настроек и получите значение из PSTextFieldSpecifier.Если я вручную зайду и добавлю произвольный текст, код будет работать так, как ожидалось.Однако всякий раз, когда я впервые устанавливаю приложение на новое устройство, первое условие выполняется как ложное, что и должно быть правдой.После выполнения кода gdb доказывает, что объект действительно равен нулю:
(gdb) по t_gName
(нулевой)
Что я здесь делаю не так?Почему условие не выполняется при первой установке приложения, а t_gName является пустым/нулевым PSTextFieldSpecifier.Я даже дошел до того, что попытался добавить DefaultValue в пакет настроек пустой строки.
Решение
[NSString stringWithFormat:@"%@", nil];
Это создает что-то вроде этого:
@"(null)"
и поэтому не является ни nil
и не равен @""
.
кстати
- Вам не нужно
stringWithFormat:
совсем. - Не проверять
string == nil
но для!string
- Вам не нужно проверять пустую строку, так как есть один набор или
nil
. - Используйте лучшее имя, чем
t_gName
, нет смысла использовать короткие имена.
Так:
- (BOOL)isFirstTimeLogin
{
NSString *groupIdentifier = [[NSUserDefaults standardUserDefaults]
objectForKey:kGroupIdentifierKey];
if (!groupIdentifier) {
DLog(@"First time login.");
return YES;
}
DLog(@"Not a first time login.");
return NO;
}
Другие советы
Попробуй это:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedFirstTime"])
{
// app already launched
NSLog(@"app already launched");
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedFirstTime"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"First Time");
// This is the first launch ever
}
}