2016-10-16 38 views
0

我使用的斯威夫特3和Facebook登錄,並保存一些基本的價值觀我從facebookSDKGraphrequest得到用戶的默認值是這樣的:NSUserDefaults的失去了記憶

 // save basic settings in standard user defaults: age, gender, first name 
     let defaults = UserDefaults.standard 
     defaults.set(firstName!, forKey: "firstName") 
     defaults.set(gender!, forKey: "gender") 

     let currentUserAge = calculateAge(birthday: birthDay!) 
     defaults.set(currentUserAge, forKey: "age") 

我只需要當用戶一旦運行該代碼登錄,然後我將信息保存到userDefaults,然後設置。

所以我的問題是最近,我最近幾次構建並打開我的應用程序在手機上,我的userDefaults是空的。

當我運行在另一類這個代碼

let defaults = UserDefaults.standard 
var name = defaults.object(forKey: "firstName") as? String 
var age = defaults.integer(forKey: "age") 
var gender = defaults.object(forKey: "gender") as? String 

我正在零所有這些值。所以現在我很偏執,因爲如果這發生在用戶的應用程序中,它會崩潰。

有人可以解釋爲什麼UserDefaults會失去它的內存? 我沒有做任何刪除或重置值。我經歷了大概100次構建,最後一次,UserDefaults的值爲零。

回答

0

NSUserDefaults不會立即將其內容存儲到磁盤。定期調用synchronize方法將數據寫入磁盤。它似乎不是你的情況。設置完數值後,請致電defaults.synchronize

(來源:https://developer.apple.com/reference/foundation/userdefaults/1414005-synchronize

+0

嘿馬爾西奧感謝您的評論。 – makthrow

+0

這並不能解釋爲什麼UserDefaults會失去它的數據,但它已經完全同步完好了嗎?可能發生的是我的Facebook請求失敗,我得到的值爲零,並且我在我的代碼中將默認值設置爲零。 – makthrow

+0

你是對的,保存在磁盤上的數據不應該消失,如果缺少對'synchronize'的調用是個問題。 – Marcio