Pregunta

Tengo un método simple en mi código que se parece a lo siguiente:

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

Simplemente, lo que hace es ir al paquete de configuración y recuperar un valor de un PSTextFieldSpecifier. Si entro manualmente y agrego un texto arbitrario, el código funciona como se esperaba. Sin embargo, cada vez que instalo la aplicación en un nuevo dispositivo, la primera condición se ejecuta como falsa, lo que debería ser cierto. Después de recorrer el código, gdb prueba que el objeto también es nulo:

(gdb) po t_gName
(nulo)

¿Qué estoy haciendo mal aquí? ¿Por qué es que la condición falla por primera vez que la aplicación se instala y t_gName es un PSTextFieldSpecifier vacío / nulo? Incluso llegué a intentar agregar un Valor predeterminado en mi paquete de configuración de una cadena vacía.

¿Fue útil?

Solución

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

Esto crea algo como esto:

@"(null)"

y, por lo tanto, no es nil ni es igual a @ " " .

por cierto

  1. No necesita stringWithFormat: en absoluto.
  2. No verifique la cadena == nil sino la !string
  3. No tiene que verificar si hay una cadena vacía, ya que hay un conjunto o es nil .
  4. Use un nombre mejor que t_gName , no hay razón para los nombres cortos.

Me gusta esto:

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

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

Otros consejos

Prueba esto:

 -(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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top