nsuserDefaults를 사용하여 올바르게 작동하는 방법 (값 검색)
-
03-07-2019 - |
문제
내 코드에는 다음과 같은 간단한 방법이 있습니다.
- (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
동일하지도 않습니다 @""
.
그런데
- 당신은 필요하지 않습니다
stringWithFormat:
조금도. - 확인하지 마십시오
string == nil
이 아니라면!string
- 하나의 세트가 있거나
nil
. - 더 나은 이름을 사용하십시오
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
}
}
제휴하지 않습니다 StackOverflow