NSUserDefaults不能保存TextField文本(Swift)

3

我正在尝试使用Swift创建一个游戏,并希望添加创建用户名的功能,该用户名将保存在NSUserDefaults中。这是我的代码:

println("Textfield Text: \(usernameTextfield.text)")

NSUserDefaults.standardUserDefaults().setObject(usernameTextfield.text, forKey:"Username")
NSUserDefaults.standardUserDefaults().synchronize()

println(NSUserDefaults.standardUserDefaults().objectForKey("Username") as? String)

输出结果如下:

文本框文本:MyUsername

nil

我唯一能想到的解释是,用户名的保存或加载失败了。有没有什么办法可以纠正这个问题,或者是我做错了什么?
感谢您的帮助!

变量“username”是什么?确保它不会复制任何nil值,我会选择NSUserDefaults.standardUserDefaults().setObject(usernameTextfield.text, forKey:"Username") - Simon
我不得不使用 textfield.text! 来获取单元测试中的非可选值。可能需要对该值进行解包。 - Alex Reynolds
在我的代码中,感叹号应该放在哪里?(在第2行的.text后面出现错误。) - nanothread
@nanothread59 这可能意味着文本输入出现了问题,usernameTextfield.text 是空的。你能否包含与文本输入相关的代码? - 67cherries
2
请注意:synchronize() 不再需要,并且使用它已被苹果不鼓励。参考链接:https://developer.apple.com/library/mac/releasenotes/Foundation/RN-Foundation/index.html#10_10UserDefaults - memmons
显示剩余4条评论
5个回答

8
println("Textfield Text: \(usernameTextfield.text)")

var myValue:NSString = usernameTextfield.text

NSUserDefaults.standardUserDefaults().setObject(myValue, forKey:"Username")
NSUserDefaults.standardUserDefaults().synchronize()

var myOutput: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("Username")
println(myOutput)

1
In Swift 4.1

 UserDefaults.standard.set(textfield.text, forKey: "yourKey") // saves text field text
  UserDefaults.standard.synchronize()

// To Retrieve
textfield.text = UserDefaults.standard.value(forKey:"yourKey") as? String

0

对于Swift 3.0,您可以通过以下方式创建用户默认设置:

UserDefaults.standard.set("yourValue", forKey: "YourString")

在控制台中打印值:

print(UserDefaults.standard.string(forKey: "YourString")!)

0

在Swift 3.0中

    let userDefult = UserDefaults.standard //returns shared defaults object.

    if let userName = usernameTextfield.text {
        //storing string in UserDefaults
        userDefult.set(userName, forKey: "userName") //Sets the value of the specified default key in the standard application domain.
    }

    print(userDefult.string(forKey: "userName")!)//Returns the string associated with the specified key.

我在我的Xcode 8上执行了这段代码,它运行得很好。但为什么会被踩呢?请随意评论,以便我能够改进自己。 - Ashok R

0
我对Roman的答案进行了小修改,使用Swift 2.0和Xcode 6.4。
保存:
    var myValue:NSString = usernameTF.text

    NSUserDefaults.standardUserDefaults().setObject(myValue, forKey:"Username")
    NSUserDefaults.standardUserDefaults().synchronize()

检索中:

var myOutput = NSUserDefaults.standardUserDefaults().objectForKey("Username")
if (myOutput != nil)
{
    self.title = "Welcome "+((myOutput) as! String)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接