对于我正在设计的应用程序,我创建了3个变量来存储信息:
var name: String?
var city: String?
var state: String?
变量用于编辑存储在我的表视图中每个单元格的每个文本字段中的信息,来自firebase。 例如:名称字段具有用户在用户注册帐户后存储在数据库中的名称。代码位于cellforRowAt:
/Sets the text to the user information.
if (firstfewCells.ttField.tag == 0)
{
firstfewCells.ttField?.text = user.name
self.name = firstfewCells.ttField.text!
}
else if (firstfewCells.ttField.tag == 1)
{
firstfewCells.ttField?.text = user.city
self.city = firstfewCells.ttField.text!
}
else
{
firstfewCells.ttField?.text = user.state
self.state = firstfewCells.ttField.text!
}
一旦用户完成文本字段的更新,一旦用户按下" Save"就会调用更新数据库的方法。按钮:
func justsave()
{
let uniqueUserID = FIRAuth.auth()?.currentUser?.uid
//Update
ref.child(uniqueUserID!).child("name").setValue(name)
ref.child(uniqueUserID!).child("city").setValue(city)
ref.child(uniqueUserID!).child("state").setValue(state)}
每当我检查firebase时,子节点都不会更新。这背后的原因是什么?我也使用了updateChildValues,我得到了相同的结果。我不认为变量在cellForRowAt中获取值。我该怎么办呢?
答案 0 :(得分:0)
您在哪里更新变量name
,city
,state
?
cellforRowAt
中的代码将单元格文本字段设置为局部变量,并立即重新设置它们 - 在编辑变量之后,没有任何内容可以更新变量。
我会在你的ViewController中实现UITextFieldDelegate,给每个TextFields一个唯一的标签,然后在你进入Save按钮之前处理输入
func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason)
{
switch textField.tag
{
case TextFieldNameTag:
name = textField.text
case TextFieldCityTag:
city = textField.text
case TextFieldStateTag:
state = textField.text
default:
// Shouldn't ever get here, but you need a default
break
}
}
查看textFieldDelegate教程 - 有很多内容。