Frage

Ich habe eine einfache Methode in meinem Code, der wie folgt aussieht:

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

Sie einfach, was das geht ist auf das Bündel Einstellungen, und einen Wert von einem PSTextFieldSpecifier abzurufen. Wenn ich manuell in gehen und beliebigen Text hinzufügen, funktioniert der Code wie erwartet. Jedes Mal, wenn ich zum ersten Mal der App auf ein neues Gerät installieren, die erste Bedingung der Ausführung als falsch, was es wahr sein sollte. Nach dem Schreiten durch den Code, beweist GDB, dass das Objekt in der Tat gleich Null auch ist:

(GDB) po t_gName
(Null)

Was soll ich möglicherweise falsch hier? Warum es ist die Bedingung zum ersten Mal versagt die App installiert ist und t_gName ist eine leere / null PSTextFieldSpecifier. Ich ging sogar so weit, wie der Versuch, einen Default in meinen Einstellung Bündel von einer leeren Zeichenfolge hinzuzufügen.

War es hilfreich?

Lösung

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

Das schafft so etwas wie folgt aus:

@"(null)"

und ist daher weder nil noch gleich @"".

durch die Art und Weise

  1. Sie brauchen nicht stringWithFormat: überhaupt.
  2. nicht prüfen string == nil aber für !string
  3. Sie haben nicht für eine leere Zeichenfolge zu überprüfen, da es ein Satz ist, oder es ist nil.
  4. Verwenden Sie einen besseren Namen als t_gName, gibt es keinen Grund für Kurznamen.

Wie folgt aus:

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

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

Andere Tipps

Versuchen Sie folgendes:

 -(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
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top