Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift:如何更新NSUserDefault?_Ios_Swift_Nsuserdefaults - Fatal编程技术网

Ios swift:如何更新NSUserDefault?

Ios swift:如何更新NSUserDefault?,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,所以,我想创建自己的迷你社交网络。在注册页面中,我有以下代码行: var ns = NSUserDefaults.standardUserDefaults() let array: [String] = ["\(login!)","\(password!)","\(nameSurname!)", "team", "university"] //team, university ns.setObject(array, forKey: "\(login)") 我只是创建数组并将其设置为NS

所以,我想创建自己的迷你社交网络。在注册页面中,我有以下代码行:

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 Login。但是我在NSUserDefaults中的数据没有改变。我怎么能修好它?我该怎么办?谢谢)

我不知道这里有什么问题。首先要改变这一点:

    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()

但不确定问题出在哪里。首先要改变这一点:

    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()

确保您使用的是NSUserDefaults中有关性能权衡的文档中的
ns.synchronize()

从NSUserDefaults读取非常快。它会将值缓存到 避免从磁盘读取数据,大约需要0.5微秒 [[NSUserDefaults standardUserDefaults]boolForKey:]在2012年的MacBook上 赞成的意见。这通常是不必要的(甚至是不可取的,因为 防止拾取新值)以缓存从中读取的结果 偏好

但是,写入NSUserDefaults的速度稍慢。一般来说,期望 使用NSPropertyListSerialization所需的时间大约与使用NSPropertyListSerialization所需的时间相同 将您的密钥和值转换为plist数据,再加上一些10秒的 微秒。由于这个原因,以及内存使用,它通常是 最好在CFPreferences中存储相对较小的数据

长话短说,不要在iOS 8及更高版本中使用同步


摘自有关NSUserDefaults中性能权衡的文档:

从NSUserDefaults读取非常快。它会将值缓存到 避免从磁盘读取数据,大约需要0.5微秒 [[NSUserDefaults standardUserDefaults]boolForKey:]在2012年的MacBook上 赞成的意见。这通常是不必要的(甚至是不可取的,因为 防止拾取新值)以缓存从中读取的结果 偏好

但是,写入NSUserDefaults的速度稍慢。一般来说,期望 使用NSPropertyListSerialization所需的时间大约与使用NSPropertyListSerialization所需的时间相同 将您的密钥和值转换为plist数据,再加上一些10秒的 微秒。由于这个原因,以及内存使用,它通常是 最好在CFPreferences中存储相对较小的数据

长话短说,不要在iOS 8及更高版本中使用同步


执行
ns.synchronize()
操作后,可能需要调用
ns.synchronize()
。setObject(数组,forKey:“\(login)”)
“\(login)”
表示登录文本字段中的值,而不是常量字符串
“login”
。这是真的吗?@Larme
synchronize()
几乎总是无用的:)看看这个链接,它将帮助您了解如何使用NSUserDefaults。我认为问题的一部分是你没有正确理解它是如何工作的。难道没有人会指出您不应该在NSUserDefaults中以纯文本形式保存用户名,尤其是密码吗?我想这里的StackOverflow用户会很忙。在执行
ns.synchronize()
之后,您可能需要调用
ns.synchronize()
。setObject(数组,forKey:“\(login)”)
“\(login)”
表示登录文本字段中的值,而不是常量字符串
“login”
。这是真的吗?@Larme
synchronize()
几乎总是无用的:)看看这个链接,它将帮助您了解如何使用NSUserDefaults。我认为问题的一部分是你没有正确理解它是如何工作的。难道没有人会指出您不应该在NSUserDefaults中以纯文本形式保存用户名,尤其是密码吗?我以为这里的StackOverflow用户都会这么做。