2011-12-28 12 views
1

ほとんどの場合、私のアプリで複数のNSUserDefaultを設定します。 NSUserDefaultsは1つの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:

{    
    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

あなたはキーの値を設定した後、[userDefaults同期]呼び出す必要があります。自動同期はほとんど起こりません。この場合、レベルを完了している間に、同期はまだ発生していません。

したがって、このようなあなたのコードを変更:

Level1ViewController:

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

これが問題だった場合はどうかご容赦ください。ありがとう。 –

0

次の2つの異なるキーの値を設定しています。あなたは何を期待していますか?

Level1ViewControllerのいずれかの値をlevelRankに設定する必要があります。LevelSelectViewControllerは、easyRankキーの値を読み取る必要があります。

+0

申し訳ありませんが、levelRankとeasyRankは同じものと思われていました。私はそれをより一般的にしようとしていました。今修正する必要があります –

関連する問題