2012-07-16 46 views
5

我在我的設置中使用NSUserDefaults。應用程序運行良好,即使我按Home鍵讓應用程序進入後臺,但如果我殺了應用程序,保存在NSUserDefaults中的數據將丟失。這是我的代碼。我有使用同步。 將首先初始化:使用NSUserDefaults殺死應用程序後保存的數據丟失

if (![userDefaults integerForKey: 
      kORFootageAirPlayModeKey]) 
    { 
     [userDefaults setInteger:TRUE forKey:kORFootageAirPlayModeKey]; 
    } 
    [userDefaults synchronize]; 
中的viewController

讀值了:

airPlayMode = [[NSUserDefaults standardUserDefaults]integerForKey:kORFootageAirPlayModeKey]; 

設置它在行動:

- (IBAction)changeAirPlayStatus:(id)sender 
{ 

    if (sender) 
    { 
     airPlayMode = [sender tag]; 

     [[NSUserDefaults standardUserDefaults] setInteger:airPlayMode forKey:kORFootageAirPlayModeKey]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
..... 

}

回答

1

我沒有看到原因。

你在模擬器目錄下檢查了庫/緩存,這裏有保存NSUserDefaults的plist。檢查它是否正確寫入。

而且請不要使用setInteger:TRUE。這在很多層面上都是錯誤的。改用setBOOL:YES。或setInteger:1。

+1

將setInteger更改爲setBOOL後,所有內容都正確無誤。所以強制轉換讓ios瘋狂。 plist文件的位置在/ Users/apple/Library/Application Support/iPhone Simulator/5.1/Applications/xxxx-xxxxx-xxxxx/Library/Preferences/com.yourappname.plist下 – 2012-07-17 02:46:46

1

確保保存數據的最佳方法是在您的應用程序委託中包含和applicationWillResignActive:中的-synchronize調用。

編輯:

此外,steipete的關於使用setInteger評論:TRUE是accurate-使用setBool:是不是。