Как правильно работать (получать значения) с NSUserDefaults

StackOverflow https://stackoverflow.com/questions/603593

Вопрос

В моем коде есть простой метод, который выглядит следующим образом:

- (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 и не равен @"".

кстати

  1. Вам не нужно stringWithFormat: совсем.
  2. Не проверять string == nil но для !string
  3. Вам не нужно проверять пустую строку, так как есть один набор или nil.
  4. Используйте лучшее имя, чем 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
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top