2017-03-07 332 views
0

我的數據突然停止顯示我的用戶名。這有什麼特別的或者我只是誤讀我的代碼。之前正在工作,但現在突然停止輸出用戶名。Firebase數據庫誤讀

enter image description here

enter image description here

enter image description here

{ 
    "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 
+1

是否正確設置了您的Firebase身份驗證? – Ro4ch

回答

0

前言:我不能做一個簡單的評論還因爲銷售代表。如Ro4ch所述,檢查授權規則非常重要。不過,您可以驗證snapshot.key的值與您的Firebase控制檯上的值相同。

我打算假設Kebtfc...general_room的孩子。如果是這種情況。那麼該快照將是用戶快照數組是否正確?你需要解析它。

+0

一切都必須設置correclty,因爲一切都在輸出,但用戶名,我不知道爲什麼 – nil

+0

@nil你確認密鑰是相同的快照? – jnewkirk

+0

我如何驗證? – nil