簡體   English   中英

Firebase數據庫誤讀

[英]Firebase database misreading

我的數據突然停止顯示我的用戶名了。 這有什么奇怪的地方嗎?還是我只是在誤讀我的代碼。 它以前一直在工作,但是現在突然停止了輸出用戶名。

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

{
   "rules": {
  "Users":{
     ".read": "true",
     ".write": "true"
},
  "general_room" : {
    ".read": "true",
     ".write": "true"
  }
    }
}



import UIKit
import Foundation
import Firebase
import FirebaseDatabase
import FirebaseStorage
import AlamofireImage
import Alamofire

struct postStruct {
    let username : String!
    let message : String!
    let photoURL : String!
    let timeStamp: String!
}



class GeneralChatroom: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

    @IBOutlet weak var messageTextField: UITextField!
    @IBOutlet weak var tableView: UITableView!



    var generalRoomDataArr = [postStruct]()


    override func viewDidLoad() {
        super.viewDidLoad()


        //TableView Cell word wrap (Dynamic Text)
        self.tableView.dataSource = self
        self.tableView.delegate = self
        self.tableView.estimatedRowHeight = 78
        self.tableView.rowHeight = UITableViewAutomaticDimension






        let ref = FIRDatabase.database().reference()
        //let userID = FIRAuth.auth()?.currentUser?.uid


        ref.child("general_room").queryOrderedByKey().observe(.childAdded, with: {snapshot in

            let snapDict = snapshot.value as? NSDictionary
            let message = snapDict?["Message"] as? String ?? ""
            let username = snapDict?["Username"] as? String ?? ""
            let firebaseUserPhotoURL = snapDict?["photo_url"] as? String ?? ""

            print("username: " + username)
            print("message: " + message)

            //Time String from Firbase Database
            let timeString = snapDict?["time_stamp"] as? String ?? "2017-03-06 00:20:51"

            //timeAgoSinceDate - Format and call function to recieve time of post
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
            let timeStampDate = dateFormatter.date(from: timeString)
            let timeStamp = timeAgoSinceDate(date: timeStampDate!, numericDates: false)


            //Assign array values
            self.generalRoomDataArr.insert(postStruct(username: username, message: message, photoURL: firebaseUserPhotoURL, timeStamp: timeStamp), at: 0)
            self.tableView.reloadData()


        })

    }


    @IBAction func backButtonPressed(_ sender: UIButton) {
        self.performSegue(withIdentifier: "BackToRoom", sender: nil)
    }


    //Message Send button is pressed data uploaded to firebase
    @IBAction func sendButtonPressed(_ sender: UIButton) {



        //If a character exists will be uploaded to firebase
        if ((messageTextField.text?.characters.count)! > 0) {

        let message : String = self.messageTextField.text!
        UploadGeneralChatRoom(message: message) //upload to general_room
        self.messageTextField.text = nil
        messageTextField.resignFirstResponder()//Quit keyboard

        self.tableView.reloadData() //Reload tableView
        //UploadUserData() //Update Rank in database

        }


    }








    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return generalRoomDataArr.count // your number of cell here
    }




    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

        //Transform Data From ^ to load at the bottom
        tableView.transform = CGAffineTransform (scaleX: 1,y: -1);
        cell?.contentView.transform = CGAffineTransform (scaleX: 1,y: -1);
        cell?.accessoryView?.transform = CGAffineTransform (scaleX: 1,y: -1);


//        tableView.backgroundColor = UIColor.white
//        tableView.layer.cornerRadius = 3.0
//        tableView.layer.masksToBounds = false
//        tableView.layer.shadowColor = UIColor.black.withAlphaComponent(0.2).cgColor
//        tableView.layer.shadowOffset = CGSize(width: 0, height: 0)
//        tableView.layer.shadowOpacity = 0.8




//        cell?.contentView.backgroundColor = UIColor.clear
//        
//        let whiteRoundedView : UIView = UIView(frame: CGRect(x: 10, y: 8, width: self.view.frame.size.width - 20, height: 120))
//        
//        whiteRoundedView.layer.backgroundColor = CGColor(colorSpace: CGColorSpaceCreateDeviceRGB(), components: [1.0, 1.0, 1.0, 0.9])
//        whiteRoundedView.layer.masksToBounds = false
//        whiteRoundedView.layer.cornerRadius = 3.0
//        whiteRoundedView.layer.shadowOffset = CGSize(width: 0, height: 0)
//        whiteRoundedView.layer.shadowOpacity = 0.2
//        
//        cell?.contentView.addSubview(whiteRoundedView)
//        cell?.contentView.sendSubview(toBack: whiteRoundedView)
//        






//

        //Set username label to display username
        let usernameLabel = cell?.viewWithTag(1) as! UILabel
        usernameLabel.text = generalRoomDataArr[indexPath.row].username


        //Set message label to display message
        let messageLabel = cell?.viewWithTag(2) as! UILabel
        messageLabel.text = generalRoomDataArr[indexPath.row].message
        messageLabel.numberOfLines = 0

        //initialize UI Profile Image
        let imageView = cell?.viewWithTag(3) as! UIImageView

        //Make Porfile Image Cirlce
        imageView.layer.cornerRadius = imageView.frame.size.width/2
        imageView.clipsToBounds = true

        //Set timeStampLabel to current time AGO
        let timeStampLabel = cell?.viewWithTag(4) as! UILabel
        timeStampLabel.text = generalRoomDataArr[indexPath.row].timeStamp
        timeStampLabel.numberOfLines = 0

        //Loading and change of Usesrs profile image on chat cell
        let userProfileChatImage = generalRoomDataArr[indexPath.row].photoURL

        //Load profile image(on cell) with URL & Alamofire Library
        let downloadURL = NSURL(string: userProfileChatImage!)
        imageView.af_setImage(withURL: downloadURL as! URL)

        // your cell coding
        return cell!
    }




    //                      KeyBoard (move text box above keyboard)




    // Start Editing The Text Field
    func textFieldDidBeginEditing(_ messageTextField: UITextField) {
        moveTextField(messageTextField, moveDistance: -250, up: true)
    }

    // Finish Editing The Text Field
    func textFieldDidEndEditing(_ messageTextField: UITextField) {
        moveTextField(messageTextField, moveDistance: -250, up: false)
    }

    // Hide the keyboard when the return key pressed
    func textFieldShouldReturn(_ messageTextField: UITextField) -> Bool {
        messageTextField.resignFirstResponder()
        return true
    }

    // Move the text field in a pretty animation!
    func moveTextField(_ messageTextField: UITextField, moveDistance: Int, up: Bool) {
        let moveDuration = 0.3
        let movement: CGFloat = CGFloat(up ? moveDistance : -moveDistance)

        UIView.beginAnimations("animateTextField", context: nil)
        UIView.setAnimationBeginsFromCurrentState(true)
        UIView.setAnimationDuration(moveDuration)
        self.view.frame = self.view.frame.offsetBy(dx: 0, dy: movement)
        UIView.commitAnimations()
    }


}//END CLASS

前言:由於代表,我無法發表簡單評論。 正如Ro4ch所述,檢查身份驗證規則很重要。 但是,您可以驗證snapshot.key值是否與Firebase控制台上的相同。

我會認為Kebtfc...是個孩子general_room 如果是這樣的話。 那么該快照將是正確的用戶快照數組嗎? 您將需要這樣解析它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM