2016-04-26 52 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及更高版本中使用同步。