2017-07-07 37 views
1

我正在swift中開發一個項目,並將Firebase作爲後端來管理數據。Firebase:如何在現有表格中添加新屬性

FirebaseApp.configure() 
Database.database().isPersistenceEnabled = true 

這是我在應用程序委託文件中設置的內容。現在在我的聊天模塊中,我通過以下代碼在Firebase數據庫中添加了消息信息。

let messageData = ["text": text, "senderId": senderId, "senderName": senderDisplayName, "MediaType": "TEXT"] 
    self.messageSentRef?.child("Messages").childByAutoId().setValue(messageData) 

現在我想在消息表中添加一個名爲TimeStamp的新屬性。

任何人都可以幫助我如何做到這一點?

+0

是否要更新現有的節點?或只是在新的? –

+0

Firebase中沒有表格,只有節點(父節點和子節點)。如果你想寫一個新的節點,它會是childNode.setValue(「timestamp」)。 childNode將在代碼中定義爲parentNode.child(「child_node」),或者在您的情況下爲messagesSentRef.child(「Messages」)。childByAutoId()。setValue(「timestamp」) – Jay

回答

1

如果您有MessageItem/MessageData對象,則可以通過修改對象結構來始終爲其添加更多屬性。爲了增加timestamp到現有的數據,你可以在你的火力地堡/數據庫主機直接添加它(這是一個手動的方式來做到這一點,或者只是做在像這樣的代碼)

let messageItem = MessageItem(text: text, 
          senderId: self.user.email, 
          senderDisplayName: false, 
          mediaType: "", 
          timestamp: "") 

let messageItemRef = self.ref.child("Message") 
messageItemRef.setValue(messageItem.toAnyObject()) 

編輯: 原來的問題沒有一個MessageItem對象,以便讓我們把一個在一起,使這個答案的工作:

在你的viewController類(或任何頂級類),我們需要實現一個MessageItem類對象這樣

class MessageItem { 
    var text = "" 
    var senderId = "" 
    var senderDisplayName = false 
    var mediaType = "" 
    var timestamp = "" 

    init(text: String, senderId: String, senderDisplayName: Bool, mediaType: String, timestamp: String) { 
     self.text = text 
     self.senderId = senderId 
     self.senderDisplayName = senderDisplayName 
     self.mediaType = mediaType 
     self.timestamp = timestamp 
    } 

    func toAnyObject() -> Any { 
     return [ 
      "text": text, 
      "senderId": senderId, 
      "senderDisplayName": senderDisplayName, 
      "mediaType": mediaType, 
      "timestamp": timestamp 
     ] 
    } 
} 
+0

這是一個很好的答案,但假設OP使用一個類對象。我將這一功能添加到您的答案中以獲得完整性。 – Jay

+0

感謝您的補充,答案更清晰。 – Lawliet

0

在Firebase中,數據可以用鍵值對的字典來表示。鍵值總是一個字符串,但值可以是多種不同的東西,一個字符串,Int等。

該值也可以是另一個鍵:值對的字典。

在你的情況,這行代碼生成一個密鑰:值對一個字符串的:和另一個字符串(messsageData)

self.messageSentRef .child( 「消息」)childByAutoId()?。的setValue(messageData)

如果你想也有一個時間戳孩子看起來不是寫一個字符串這樣

app_node 
    Messages 
     -y88hj3-39i9isdf: "some message data" 

,你可以寫鍵的整個詞典:值對 - 這樣

let messageDictionary = [ 
    "text": "some text", 
    "senderId": "the sender Id", 
    "senderDisplayName": "the sender display name", 
    "mediaType": "a media type", 
    "timestamp": "170708" 
] 

let messageItemRef = self.ref.child("Messages") 
messageItemRef.childByAutoId().setValue(messageDictionary) 

它創建以下節點:

app_node 
    Messages 
     -Y9js9s9m494jms: 
      text: "some text" 
      senderId: "the sender Id" 
      senderDisplayName: "the sender display name" 
      mediaType: "a media type" 
      timestamp: :170708" 
相關問題