[英]Firebase database misreading
My data all of a sudden stopped showing up for my username. 我的数据突然停止显示我的用户名了。 Is there something very odd about this or am I just misreading my code.
这有什么奇怪的地方吗?还是我只是在误读我的代码。 It was working before, but now all of a sudden it has stopped outputting the username.
它以前一直在工作,但是现在突然停止了输出用户名。
{
"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
Preface: I can't make a simple comment yet because of rep. 前言:由于代表,我无法发表简单评论。 Checking the auth rules is important as Ro4ch mentioned.
正如Ro4ch所述,检查身份验证规则很重要。 However, you could verify that the
snapshot.key
value is the same as the one on your Firebase console. 但是,您可以验证
snapshot.key
值是否与Firebase控制台上的相同。
I'm going to assume that Kebtfc...
is a child of general_room
. 我会认为
Kebtfc...
是个孩子general_room
。 If this is the case. 如果是这样的话。 then that snapshot would be an array of user snapshots correct?
那么该快照将是正确的用户快照数组吗? You would need to parse it as such.
您将需要这样解析它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.