Pergunta

Eu tenho um método simples no meu código que é semelhante ao seguinte:

- (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;
}

Simplesmente o que isso faz é ir para as configurações do bundle, e recuperar um valor de uma PSTextFieldSpecifier. Se eu for manualmente e adicionar algum texto arbitrário, o código funciona como esperado. No entanto, sempre que eu primeiro instalar o aplicativo em um novo dispositivo, a primeira condição está executando como falsa, que deve ser verdade. Após percorrendo o código, gdb prova que o objeto é de fato nula, bem como:

(GDB) po t_gName
(Null)

O que estou possivelmente fazendo de errado aqui? Por que é a condição está a falhar pela primeira vez que o aplicativo está instalado e t_gName é um vazio / PSTextFieldSpecifier nulo. Eu mesmo fui tão longe como tentar adicionar um valor padrão em minhas configurações do bundle de uma cadeia vazia.

Foi útil?

Solução

[NSString stringWithFormat:@"%@", nil];

Isso cria algo como isto:

@"(null)"

e, portanto, nem nil nem igual a @"".

pela maneira

  1. Você não precisa stringWithFormat: em tudo.
  2. Não verificar para string == nil mas para !string
  3. Você não tem que verificar se há uma cadeia vazia, como há um conjunto ou de nil.
  4. Use um nome melhor do que t_gName, não há nenhuma razão para nomes curtos.

Como esta:

- (BOOL)isFirstTimeLogin 
{
    NSString *groupIdentifier = [[NSUserDefaults standardUserDefaults]
                                    objectForKey:kGroupIdentifierKey];
    if (!groupIdentifier) {
        DLog(@"First time login.");
        return YES;
    }

    DLog(@"Not a first time login.");
    return NO;
}

Outras dicas

Tente isto:

 -(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
        }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top