Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为Firebase数据库添加值_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 为Firebase数据库添加值

Ios 为Firebase数据库添加值,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正试图让时间戳功能在我的应用程序上运行,但事实并非如此。我正在使用JSQMessagesViewController构建聊天应用程序。对于用户发送的每条消息,我希望它显示在我的数据库中 到目前为止,这是我的代码: //ADD A NEW MESSAGE let timeStamp = NSNumber(value: Int(NSDate().timeIntervalSince1970)) private func addMessage(withId id: String, name

我正试图让时间戳功能在我的应用程序上运行,但事实并非如此。我正在使用JSQMessagesViewController构建聊天应用程序。对于用户发送的每条消息,我希望它显示在我的数据库中

到目前为止,这是我的代码:

//ADD A NEW MESSAGE

let timeStamp = NSNumber(value: Int(NSDate().timeIntervalSince1970))

    private func addMessage(withId id: String, name: String, text: String, time: NSNumber) {
        if let message = JSQMessage(senderId: id, displayName: name, text: text) {
            messages.append(message)
        }
    }

    override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {

        let itemRef = rootRef.child("messages").child("\(self.convoId!)").childByAutoId() // 1
        let messageItem = [ // 2
            "senderId": senderId!,
            "ReceiverId": senderDisplayName!,
            "text": text!,
            "timestamp": timeStamp,
            ] as [String : Any]

        itemRef.setValue(messageItem) // 3

        JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4

        finishSendingMessage() // 5
        isTyping = false
    }

 private func observeMessages() {
    // 1.
    let messageQuery = rootRef.child("messages/\(self.convoId!)").queryLimited(toLast: 25)

    // 2. We can use the observe method to listen for new
    // messages being written to the Firebase DB
    newMessageRefHandle = messageQuery.observe(.childAdded, with: { (snapshot) -> Void in

    // 3.
    let messageData = snapshot.value as! Dictionary<String, String>

    if let id = messageData["senderId"] as String!, let name = messageData["ReceiverId"] as String!, let text = messageData["text"] as String!, let time = messageData["timeStamp"] as Any!, text.characters.count > 0 {

    // 4.
    self.addMessage(withId: id, name: name, text: text, time: time as! NSNumber)

    // 5
    self.finishReceivingMessage()
  } 
以下是我的数据库的屏幕截图:
直接发送时间戳无需将其转换为nsnumber

override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {

            let itemRef = rootRef.child("messages").child("\(self.convoId!)").childByAutoId() // 1
            let messageItem = [ // 2
                "senderId": senderId!,
                "ReceiverId": senderDisplayName!,
                "text": text!,
                "timestamp": NSDate().timeIntervalSince1970,
                ] as [String : Any]

            itemRef.setValue(messageItem) // 3

            JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4

            finishSendingMessage() // 5
            isTyping = false
        }
更改此行:

let messageData = snapshot.value as! [String: AnyObject]

你有什么错误?还是问题?@VladPulichev当我发送消息时,应用程序崩溃了。消息被发送到数据库,但没有显示在我的视图控制器中,我在let messageData=snapshot.value as!上得到一条绿线!字典里的as![字符串:AnyObject]。它有用吗?@VladPulichev不,没用我一直都是这样![字符串:AnyObject]。它还能工作吗?我仍然保持observeMessages的功能不变,因为当我这样做时,应用程序崩溃了