不要将所有文本字段更新为firebase

时间:2017-06-08 05:32:01

标签: ios firebase firebase-realtime-database uitextfield

我有三个textFields,当用户在其中输入信息时,信息会发送到Firebase

     func buttonMethod() { 
if let uid = FIRAuth.auth()?.currentUser?.uid{
            if let City = City.text{
                if let Major = Major.text{
                    if let College = College.text{

                        let saveObject: Dictionary<String, Any> = [
                            "uid": uid,
                            "City" : City,
                            "Major" : Major,
                            "College" : College
                        ]
                   }
               }
          }
      }



FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).setValue(saveObject)

使用相同的textFields,用户可以编辑他们的信息。信息将显示在另一个视图控制器的标签中。

  func loadInfo(){
        if (FIRAuth.auth()?.currentUser) != nil{

            FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in


                if let postsDictionary = snapshot .value as? [String: AnyObject] {
                    for post in postsDictionary {
                        //self.posts.add(post.value)

                        let city = postsDictionary["City"] as! String
                        let major = postsDictionary["Major"] as! String
                        let college = postsDictionary["College"] as! String
                        self.City.text = city
                        self.Major.text = major
                        self.College.text = college
                    }

                }})}
    }

我的问题是,当用户编辑信息时,如果未编辑textField,则会将textField中未编辑的Firebase的值替换为空字符串。我希望如果用户不编辑textField,那么Firebase中的值应该保持不变。我从这开始:

 if City.tex t== "" {

 }
 if Major.text=="" {

 }
 if College.text==""{

 }

但我不确定从哪里去。

2 个答案:

答案 0 :(得分:0)

如果文本字段文本为空,则不要将该字段发送到firebase。假如用户没有编辑城市字段,则不要在方法中添加城市textField来向firebase发送值。

请尝试更新您的buttonMethod()

func buttonMethod() {
    if let uid = FIRAuth.auth()?.currentUser?.uid{

        var tempObject = [String:Any]()
        tempObject["uid"] = uid
        if !City.text.isEmpty {
            tempObject["City"] = City.text
        }

        if !Major.text.isEmpty{
            tempObject["Major"] = Major.text
        }

        if !College.text.isEmpty{
            tempObject["College"] = College.text
        }

        let saveObject:Dictionary<String,Any> = tempObject

}

不是将对象保存到firebase,而是使用updateChildValues()函数

更新firebase上的数据

答案 1 :(得分:0)

我认为还有另一种解决方案:您可以在文本字段中显示原始值/信息,而不是将它们留空。因此,尝试使用以下结构删除代码中的文本字段:

import Foundation
import SwiftUI

struct TextFieldWithDefaultValue: View {

    var model:userModel    // Replace it with your own view model
    var textFieldName: String
    @State var editedValue: String

    init(model: userModel, text: String) {
        self.model = model
        self.textFieldName = text
        switch self.textFieldName {
        case "Name": self._editedValue = State(wrappedValue: model.getName())
        case "Bio": self._editedValue = State(wrappedValue: model.getBio())
        case "Interest": self._editedValue = State(wrappedValue: model.getInterest())
        default:
            self._editedValue = State(wrappedValue: "No records")
        }
    }
    
    var body: some View {
        TextField(textFieldName, text: $editedValue)
    }

}