Domanda

Ho un metodo semplice nel mio codice che assomiglia al seguente:

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

Semplicemente ciò che fa è andare al bundle Impostazioni e recuperare un valore da un PSTextFieldSpecifier. Se entro manualmente e aggiungo del testo arbitrario, il codice funziona come previsto. Tuttavia, ogni volta che installo l'app per la prima volta su un nuovo dispositivo, la prima condizione viene eseguita come falsa, il che dovrebbe essere vero. Dopo aver controllato il codice, gdb dimostra che anche l'oggetto è davvero nullo:

(gdb) po t_gName
(Null)

Cosa posso fare di sbagliato qui? Perché la condizione non riesce per la prima volta che l'app viene installata e t_gName è un PSTextFieldSpecifier vuoto / null. Ho persino cercato di aggiungere un DefaultValue nel mio pacchetto di impostazioni di una stringa vuota.

È stato utile?

Soluzione

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

Questo crea qualcosa del genere:

@"(null)"

e pertanto non è né zero né uguale a @ " " .

a proposito

  1. Non è necessario stringWithFormat: .
  2. Non cercare string == nil ma !string
  3. Non è necessario verificare la presenza di una stringa vuota, poiché esiste un set o è nil .
  4. Usa un nome migliore di t_gName , non c'è motivo per i nomi brevi.

In questo modo:

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

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

Altri suggerimenti

Prova questo:

 -(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
        }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top