2015-04-02 78 views
1

我正在做一个警报,有几个文本字段,这将保存在服务器上,一旦保存命中。我设法让它发挥作用,但发现一些我不明白的奇怪东西。我不确定如何用文字解释它,所以我会发布有问题的代码。现在UIAlertController addTextFieldWithConfigurationHandler。奇怪的功能

var enteredName: UITextField! 

let myAlert: UIAlertController = UIAlertController(title: "", message: nil, preferredStyle: .Alert) 
let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in 
    println(self.enteredName.text) 
} 
myAlert.addAction(saveAction) 
myAlert.addTextFieldWithConfigurationHandler { textField -> Void in 
    textField.placeholder = "Name" 
    self.enteredName = textField 
} 
self.presentViewController(myAlert, animated: true, completion: nil) 

,上面的代码工作,我也没有与它的问题,但是,我有一个非常相似的代码块原本没有工作。上面的代码片段将显示一个带有文本字段的提醒,输入内容并点击保存后会打印您输入的内容。下面的代码应该这样做,但打印空行,我假设空字符串。

var enteredName: String! 

let myAlert: UIAlertController = UIAlertController(title: "", message: nil, preferredStyle: .Alert) 
let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in 
    println(self.enteredName) 
} 
myAlert.addAction(saveAction) 
myAlert.addTextFieldWithConfigurationHandler { textField -> Void in 
    textField.placeholder = "Name" 
    self.enteredName = textField.text 
} 
self.presentViewController(myAlert, animated: true, completion: nil) 

正如你所看到的,没有太多改变,对我来说,两个代码块看起来应该运行。差异:在代码片段没有工作

  1. 变量是一个字符串,而不是为UITextField
  2. 变量被保存到的TextField.text而不是文本框
  3. 警报被打印的自我。而不是self.enteredName.text

所以我的问题是这样的,为什么底部的文本块不能正常工作而顶部块呢?

+0

虽然我知道这不是必需的,但我会很感激你为什么投票的意见,所以我可以编辑它以更好地符合,或理解我做错了什么,所以我的下一个问题将更多关于主题。 – TaylorAllred 2015-04-02 22:23:32

回答

1

addTextFieldConfigurationHandler方法在用户有机会键入任何内容并按下保存之前被调用(因此,在您执行saveAction的代码被执行之前)。

在底部的例子中,你永远分配什么你enteredName字符串的唯一情况是,当你添加文本字段配置处理器。在用户看到文本字段后,任何时候都不会调用文本字段配置处理程序(所以用户没有机会键入文本字段之后)。

而且字符串变量不能从文本字段中奇迹般地获得值。

+0

这很有道理,但那么顶级示例如何工作? enteredName变量如何获取_its_数据以供稍后使用? – TaylorAllred 2015-04-02 22:26:43

+0

顶部示例使'self.enteredName'指向与'textField'相同的对象。 'UITextField'是一个引用类型。所以当'.text'属性改变时,两个变量都会看到它。所有的变量只是一个指向存储位置的指针,在那里有一个'UITextField',并且你让它们都指向相同的内存位置。 – nhgrif 2015-04-02 22:29:29

+0

好的,这是有道理的,谢谢你为我解释它。 – TaylorAllred 2015-04-02 22:56:01