2014-10-07 3 views
0

이전에 내 NSUserDefaults이 정상적으로 작동했지만 iOS 8으로 업그레이드 한 후 시뮬레이터에서 작동하지 않습니다. 실제 장치에는 iOS 8이 없으므로 실제 장치에 대해서는 확신 할 수 없습니다. 내가 iOS7에서 테스트하고 그것은 시뮬레이터와 실제 장치 모두에서 일하고있다. 그래서 나는 확실하지 않다 iOS 8 문제 또는 iOS 8 시뮬레이터 문제.NSUserDefaults가 IOS 8 시뮬레이터에서 작동하지 않습니다.

제 문제는 저장 한 후에도 항상 빈 문자열을 반환한다는 것입니다. 아래

내 코드 :

+(void)SetStringValueForConfigurationKey: (NSString *) _objectkey withValue:(NSString *)_value 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults synchronize]; //let's make sure the object is synchronized 
    [defaults setValue:_value forKey:_objectkey]; 
    [defaults synchronize];//make sure you're synchronized again 
} 

+(NSString *)GetStringValueForConfigurationKey: (NSString *)_objectkey 
{ 
    //create an instance of NSUserDefaults 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults synchronize]; //let's make sure the object is synchronized 
    if ([defaults stringForKey:_objectkey] == nil) 
    { 
     //I don't want a (null) returned 
     return @""; 
    } 
    else 
    { 

     return [defaults stringForKey:_objectkey]; 
    } 
} 

내가 iOS 8.0.2에 시뮬레이터를 업그레이드 할 수있는 방법이 있습니까? 또는 문제의 원인을 어떻게 찾을 수 있습니까?

감사합니다.

+1

valueforkey로 시도 했습니까? – Rushabh

답변

2

당신이

[defaults setValue:_value forKey:_objectkey]; 

을 설정하려고하지만 나중에

return [defaults stringForKey:_objectkey]; 

나는 근본 원인을 발견했다

[defaults setObject:<#(id)#> forKey:<#(NSString *)#>]; 
[defaults objectForKey:<#(NSString *)#>]; 
+0

조언을 주셔서 감사합니다 .. – teapeng

0

으로 시도하십시오 가지고, 아이폰 OS 7 사이에 다른 행동이 및 iOS 8

자세한 내용을 보려면 로그인 화면에서이 문제에 직면하고 있습니다. 로그인 화면 자체에서 "부분 컬 (Partial Curl)"전환을 통해 다른보기 컨트롤러에 넣을 사용자를 선택해야했습니다. 이 전환에서 문제가 발생합니다.

문제는 다음이 코드에 있습니다 : 아이폰 OS 7에서

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 

} 

만 처음로드하는 동안 한 번만 호출이 기능을 사용하지 않음. 그러나 iOS 8에서는 "Partial Curl"VC에서 다시 원래 로그인 VC로 돌아갈 때 다시 호출됩니다.

여기가 문제가 된 곳입니다. 이 함수 내에서 NSUserDefaults 값을 모두 재설정 했으므로 iOS 8에서는 로그인 VC로 돌아가서 저장할 때마다 모든 값이 사라집니다. 따라서 빈 값을 반환합니다. 나는 내 문제를이 함수에서 iOS 8에서 다중 호출을 처리하도록 변경했다.