Firebase:如何在现有表中添加新属性

时间:2017-07-07 05:00:56

标签: ios swift firebase firebase-realtime-database

我正在开发一个swift项目,并将firebase作为管理数据的后端。

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

这是我在app delegate文件中设置的内容。现在在我的聊天模块中,我通过以下代码在firebase数据库中添加了消息信息。

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

现在我想在消息表中添加一个名为TimeStamp的新属性。

任何人都可以帮我怎么做?

2 个答案:

答案 0 :(得分:1)

如果您有MessageItem / MessageData对象,则可以通过修改对象结构始终向其添加更多属性。要将timestamp添加到现有数据,您可以直接在Firebase /数据库控制台中添加它(这是一种手动方式,或者只是在这样的代码中执行)

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
        ]
    }
}

答案 1 :(得分:0)

在Firebase中,数据可以由键:值对的字典表示。键总是一个字符串,但值可以是许多不同的东西,String,Int等。

该值也可以是键的另一个词典:值对。

在你的情况下,这行代码生成一个键:字符串的值对:和另一个字符串(messsageData)

  

self.messageSentRef?.child( “消息”)。childByAutoId()。的setValue(messageData)

看起来像这样

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

如果你想拥有一个时间戳子节点,而不是写单个字符串,你可以编写一个完整的key:value对字典 - 就像这样

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"