質問

次のような単純なメソッドがコードにあります:

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

これが行うことは、単に設定バンドルに移動し、PSTextFieldSpecifierから値を取得することです。手動で任意のテキストを追加すると、コードは期待どおりに機能します。ただし、新しいデバイスにアプリを最初にインストールするときは常に、最初の条件はfalseとして実行されますが、これはtrueである必要があります。コードをステップ実行した後、gdbはオブジェクトが実際にnilであることを証明します:

(gdb)po t_gName
(null)

ここで何が間違っているのでしょうか?アプリが初めてインストールされ、t_gNameが空/ null PSTextFieldSpecifierであるときに条件が失敗するのはなぜですか。空の文字列の設定バンドルにDefaultValueを追加しようとさえしました。

役に立ちましたか?

解決

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

これにより、次のようなものが作成されます。

@"(null)"

であり、 nil でも @"" でもありません。

ところで

  1. stringWithFormat:はまったく必要ありません。
  2. string == nil をチェックせず、!string
  3. をチェックする
  4. 1つのセットがあるか、または nil であるため、空の文字列をチェックする必要はありません。
  5. t_gName よりも適切な名前を使用します。短い名前の理由はありません。

これに似ています:

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

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

他のヒント

これを試してください:

 -(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
        }
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top