2011-12-28 4 views
1

대부분의 경우 작동하는 앱에 여러 개의 NSUserDefaults를 설정했습니다. NSUserDefaults는 하나의 ViewController에서 호출되고 다른 것으로 구현됩니다 (예 : 레벨 선택이있는 게임에서). 사용자가 레벨 선택 화면에서 뒤로 버튼을 누를 때까지 제대로 작동하는 것 같습니다. 그들이 레벨 select viewController로 돌아가려고하면 NSUserDefaults가 화면에로드되지 않습니다. 다음은 내 코드입니다 :앱을 떠난 후 NSUserDefaults가로드되지 않습니다.

LevelSelectViewController :

- (void)viewDidLoad 
{  
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults synchronize]; 

    [super viewDidLoad]; 
} 

- (void)Level1DidFinish:(Level1 *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    NSInteger rank = [userDefaults integerForKey:@"levelRank"]; 
    { 
     if (rank == 1) { 
      button2.hidden = NO; 

     } 
    } 
} 

Level1ViewController :

당신은 키에 대한 값을 설정 한 후 [userDefaults 동기화] 호출 할 필요가
{    
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setInteger:1 forKey:@"levelRank"]; 
} 

답변

2

첫 번째 문제는 당신이 userDefaults의 인스턴스를 생성하고 있지만 어떤 값을 설정하지 않는 것입니다. 그래서 여기 synchronize를 호출 실제로 아무것도하지 않고있다 :

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults synchronize]; 

을 당신이 당신의 Integer를 설정 한 후, 다음 synchronize를 호출해야합니다

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setInteger:1 forKey:@"easyRank"]; 
[userDefaults synchronize]; 
+0

그렇다면 viewDidLoad에 아무것도 넣지 않거나 그냥 비워 두겠습니까? –

+0

신경 쓰지 마라, 나는 내가해야 할 일을 알아 냈다. 도와 줘서 고마워. –

4

. 자동 동기화는 거의 발생하지 않으므로이 경우 레벨을 완료하는 동안 동기화는 아직 발생하지 않습니다.

그래서 다음과 같이 코드를 수정 :

Level1ViewController :

{    
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setInteger:1 forKey:@"easyRank"]; 
    [userDefaults synchronize]; 
} 
+0

문제가있는 경우 동의 해주십시오. 감사. –

0

을 당신은 두 개의 서로 다른 키 값을 설정하고 있습니다. 너는 무엇을 기대하고 있니?

Level1ViewControllerlevelRank 또는 LevelSelectViewController의 값을 easyRank 키의 값으로 읽어야합니다.

+0

죄송합니다. levelRank와 easyRank가 같았습니다. 나는 그것을 좀 더 일반화하려고 노력했다. 지금 수정해야합니다. –

관련 문제