2017-06-17 85 views
0

我的代码如下所示。 一旦我到达写入数据库的部分,它似乎跳过了ContestName。然后它会将竞赛描述和用户记录到数据库中。如果我在比赛名称之前先放置比赛说明,则比赛说明被错过,但名称被存储。非常时髦的错误。任何帮助,将不胜感激。Firebase未采用所有参数

注意:我尝试了一次睡眠,但那根本没有帮助。

@IBAction func SubmitContest(_ sender: Any) { 

//Convert to text 
     let contesttitle = ContestName.text; 
     let contestdescript = ContestDescription.text; 

//Some Firebase Stuff 
     let userID = Auth.auth().currentUser?.uid 
     let contestRef = ref.child("craftType").child("Custom") 
     let thisContest = contestRef.childByAutoId() 

//Store to firebase 
//Whatever one is first is not making it to firebase database 
     thisContest.setValue(["ContestName": contesttitle]) 
     thisContest.setValue(["ContestDescription": contestdescript]) 
     thisContest.child("User").setValue(userID) 
    } 

回答

1

在某个位置调用setValue将替换该位置的所有现有数据。所以在这段代码中:

thisContest.setValue(["ContestName": contesttitle]) 
thisContest.setValue(["ContestDescription": contestdescript]) 

第二行代替了第一行写入的内容。

您应该将二者结合起来:

thisContest.setValue(["ContestName": contesttitle, "ContestDescription": contestdescript]) 

或者use updateChildValues(这并不在该位置更换​​整个数据,但只能在属性指定):

thisContest.updateChildValues(["ContestName": contesttitle]) 
thisContest.updateChildValues(["ContestDescription": contestdescript])