Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
Cocoa touch NSUserDefault不保存文本字段文本(Swift)_Cocoa Touch_Nsuserdefaults_Swift_Xcode6 - Fatal编程技术网

Cocoa touch NSUserDefault不保存文本字段文本(Swift)

Cocoa touch NSUserDefault不保存文本字段文本(Swift),cocoa-touch,nsuserdefaults,swift,xcode6,Cocoa Touch,Nsuserdefaults,Swift,Xcode6,我正在尝试用Swift创建一个游戏,我想添加创建用户名的功能,该功能将保存在NSUserDefaults中。这是我的代码: println("Textfield Text: \(usernameTextfield.text)") NSUserDefaults.standardUserDefaults().setObject(usernameTextfield.text, forKey:"Username") NSUserDefaults.standard

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

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

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

println(NSUserDefaults.standardUserDefaults().objectForKey("Username") as? String)
输出为:

Text字段Text:MyUsername

关于为什么打印nil,我能看到的唯一解释是用户名的保存或加载失败。有没有什么方法可以纠正这个问题,或者我做错了什么


感谢您的帮助

我用Swift 2.0和Xcode 6.4对Roman的答案做了一点修改

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)
保存:

    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)
    }
检索:

    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)
    }
在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.

对于swift 3.0,您可以通过以下方式创建用户默认值:

UserDefaults.standard.set("yourValue", forKey: "YourString")
要在控制台中打印值,请执行以下操作:

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

使用字符串文字保存用户名时,请将其替换为
username
。看看是否得到相同的结果。变量“username”是什么?确保它不复制任何nil值,我将使用
NSUserDefaults.standardUserDefaults().setObject(usernameTextfield.text,forKey:“Username”)
而不是。Username在代码中的前面声明为:var Username=usernameTextfield.text;我必须做
textfield.text
获取单元测试的未包装值。可能需要打开值note
synchronize()
不再需要,苹果不鼓励使用它:我在我的xcode 8上执行了这段代码。它工作得很好。仍然是它被否决的原因。请随时发表评论,以便我可以提高自己。