2011-12-28 15 views
1

我在我的應用程序中設置了多個NSUserDefaults大部分的工作。 NSUserDefaults從一個ViewController中調用並在另一個(例如在具有關卡選擇的遊戲中)實現。這似乎工作得很好,直到用戶按下關卡選擇屏幕上的後退按鈕。當他們嘗試返回級別選擇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中,或者只是把它留空? – 2011-12-29 01:37:00

+0

沒關係,我想清楚我需要做什麼。感謝您的幫助。 – 2011-12-29 01:57:08

4

你需要一個鍵設定值後打電話到[userDefaults同步。自動同步發生的情況很少,所以在這種情況下,當一個完成一個關卡時,同步將不會發生。

所以修改你這樣的代碼:

Level1ViewController:

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

如果這是問題,您可以接受嗎?謝謝。 – 2011-12-29 07:00:41

0

你對兩個不同的密鑰設定值。你期望發生什麼?

要麼Level1ViewController需要設置levelRank的值或LevelSelectViewController需要讀取easyRank密鑰的值。

+0

對不起,levelRank和easyRank應該是一樣的。我試圖讓它更通用。現在應該修好了 – 2011-12-29 01:18:53

相關問題