2016-04-26 20 views
0

所以,我想創建我自己的迷你社交網絡。在註冊頁面我有以下幾行代碼:swift:如何更新NSUserDefault?

var ns = NSUserDefaults.standardUserDefaults()  
let array: [String] = ["\(login!)","\(password!)","\(nameSurname!)", "team", "university"] //team, university 
ns.setObject(array, forKey: "\(login)") 

我只是創建數組並將其設置爲NSUserDefaults。

而且我還有一個頁面,用戶可以在其中更改有關它們的信息或數據,例如更改密碼。在該頁面中我有以下的代碼行:

let login = loginTextField.text! 
     let password = passwordTextField.text! 
     let nameSurname = nameSurnameTextField.text! 
     let team = teamTextField.text! 
     let university = universityTextField.text! 

      let ns = NSUserDefaults.standardUserDefaults() 
      let array: [String] = ["\(login)","\(password)","\(nameSurname)", "\(team)", "\(university)"] //team, university course 
      ns.setObject(array, forKey: "\(login)") 

我在這裏創造新的數組,並設置這個新的數組KEY-登錄。但是我在NSUserDefaults中的數據不會改變。我如何解決它?我該做什麼?謝謝)

+2

執行'ns.setObject(array,forKey:「\(login)」)''後,可能需要調用'ns.synchronize()'。 – Larme

+2

'「\(login)」'表示來自登錄文本字段的值而不是常量字符串'「login」'。這是真的嗎? – vadian

+0

它看起來並不像你以同樣的方式處理兩個數組。因爲你使用數組作爲在NSUserDefaults的關鍵,他們必須具有完全相同的代碼各部分相同的價值觀,否則,你不更新第二陣列中的第一陣列。 – fsb

回答

2

不知道這裏是什麼問題。首先改變這一點:

var ns = NSUserDefaults.standardUserDefaults() 
    //No need for " quotation marks you are using String vars 
    let array: [String] = [login!, password!, nameSurname!, team, university] 
    ns.setObject(array, forKey: "login") 

    //Save the changes 
    ns.synchronize() 


    //Now when we want to load the information 
    let ns = NSUserDefaults.standardUserDefaults() 
    let array = ns.objectForKey("login") 
    //This prints the users password 
    print(array![1]) 



    //Make some changes 
    let newArray = ["new name", password!, nameSurname!, team, university] 
    ns.setObject(newArray, forKey: "login") 
    //Remember to save 
    ns.synchronize() 

麥克確信您使用的是ns.synchronize()

0

從有關性能的折衷文件中採取NSUserDefaults的:

從讀NSUserDefaults的速度非常快。它會將值緩存到 避免從磁盤讀取數據,並且需要大約0.5微秒的時間才能在2012年MacBook Pro上使用 [[NSUserDefaults standardUserDefaults] boolForKey:]。這通常是不必要的(甚至是不受歡迎的,因爲 阻止拾取新值)來緩存從首選項 中讀取的結果。

但是,寫入NSUserDefaults會慢一點。一般來說,預計 它大致需要使用NSPropertyListSerialization到 將您的密鑰和值轉換爲plist數據,再加上幾個10s的 微秒。出於這個原因,以及內存使用情況,通常最好在CFPreferences中存儲相對較小的數據。

長話短說,不要在iOS 8及更高版本中使用同步。