Question

J'ai dans mon code une méthode simple qui ressemble à ce qui suit:

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

Cela consiste simplement à accéder au groupe Paramètres et à récupérer une valeur à partir d'un PSTextFieldSpecifier. Si j'entre manuellement et que j'ajoute du texte arbitraire, le code fonctionne comme prévu. Cependant, chaque fois que j'installe l'application sur un nouvel appareil, la première condition est exécutée comme étant fausse, ce qui devrait être vrai. Après avoir parcouru le code, gdb prouve que l'objet est bien nul lui aussi:

(gdb) po t_gName
(null)

Qu'est-ce que je fais peut-être mal ici? Pourquoi est-ce que la condition échoue pour la première fois que l'application est installée et que t_gName est un PSTextFieldSpecifier vide / null. J'ai même été aussi loin que d'essayer d'ajouter une valeur par défaut à mon paquet de paramètres d'une chaîne vide.

Était-ce utile?

La solution

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

Ceci crée quelque chose comme ceci:

@"(null)"

et n'est donc ni nil , ni égal à @ "" .

au fait

  1. Vous n'avez pas besoin de stringWithFormat: .
  2. Ne recherchez pas string == nil mais pour ! string
  3. Il n'est pas nécessaire de rechercher une chaîne vide, car il existe un seul ensemble ou nil .
  4. Utilisez un meilleur nom que t_gName , il n'y a aucune raison d'utiliser des noms abrégés.

Comme ceci:

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

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

Autres conseils

Essayez ceci:

 -(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
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top