문제

내 코드에는 다음과 같은 간단한 방법이 있습니다.

- (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로 실행되는데, 이는 사실이어야합니다. 코드를 밟은 후 GDB는 객체가 실제로는 없음을 증명합니다.

(gdb) po t_gname
(없는)

내가 여기서 무엇을 잘못하고 있을까요? 앱이 처음 설치되고 t_gname은 빈/널 pStextFieldSpecifier입니다. 나는 심지어 빈 문자열의 설정 번들에 기본값을 추가하려고 노력했습니다.

도움이 되었습니까?

해결책

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

이것은 다음과 같은 것을 만듭니다.

@"(null)"

그러므로도 아닙니다 nil 동일하지도 않습니다 @"".

그런데

  1. 당신은 필요하지 않습니다 stringWithFormat: 조금도.
  2. 확인하지 마십시오 string == nil 이 아니라면 !string
  3. 하나의 세트가 있거나 nil.
  4. 더 나은 이름을 사용하십시오 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