Я делаю проект с базой данных Firebase и Swift. Он у меня есть, чтобы пользователь мог сделать сообщение (это мое личное приложение, в основном забавный проект), и он отлично загружается в виде таблицы. Но внутри ячейки табличного представления у меня есть метка, где имя должно идти. Это пользовательская ячейка просмотра таблицы. У меня это тоже правильно настроено.
Проблема заключается в том, что я пытаюсь вставить имя автора в ячейку метки. Я перепробовал много вещей ... и я не могу понять это.
У меня есть два класса в моем коде. Я знаю, что это может быть не лучшая практика кодирования, и мой код может быть не лучшим - но я учусь.
import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
let userID = Auth.auth().currentUser?.uid
var currentuser:String = ""
class TweetViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
var authornamereference: String = ""
var timelinepost:[String] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return timelinepost.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TweetTableViewCell
cell.postcontenttext.text = self.timelinepost[indexPath.row]
cell.postauthorlabel.text = self.authornamereference
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
@IBOutlet weak var mytableview: UITableView!
func alertcreated (title:String, message:String){
let alert = UIAlertController(title: title, message: message, preferredStyle:.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in
alert.dismiss(animated: true, completion: nil)
}))
self.present(alert, animated: true, completion: nil)
}
@IBOutlet weak var NameLabel: UILabel!
var ref:DatabaseReference!
let userID = Auth.auth().currentUser?.uid
var possstkeystring:String = "author name"
override func viewDidLoad() {
super.viewDidLoad()
possstkeystring = "author"
ref = Database.database().reference()
ref.child("User").child(userID!).observe(.value) { (snapshot) in
let userinfo = snapshot.value as? NSDictionary
let username = userinfo!["Name"] as! String
self.NameLabel.text = username
self.NameLabel.font = UIFont(name: "Bodoni 72 Smallcaps", size: 25)
currentuser = self.NameLabel.text!
}
self.ref.child("All Post").observe(DataEventType.childAdded) { (snapshot) in
if let item = snapshot.value as? NSDictionary{
var keyvalues: [String:Any] = [:]
keyvalues = ["Post Content": item["Post Content"] as Any]
self.timelinepost.append(keyvalues["Post Content"] as! String)
self.mytableview.reloadData()
}
self.ref.child("All Post").child(self.possstkeystring).child("Post Author").observe(DataEventType.value, with: { (snapshot) in
if let item = snapshot.value as? NSDictionary{
self.authornamereference = item["Post Author"] as! String
}
})
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
@IBAction func addtweet(_ sender: UIButton) {
performSegue(withIdentifier: "addnewpostsegue", sender: self)
}
}
class TestAddPost: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
}
@IBOutlet weak var postbuttonoutlet: UIButton!
@IBAction func cancelbacktotimeline(_ sender: UIButton) {
self.performSegue(withIdentifier: "cancelpost", sender: self)
}
var officialpostkeyvalue = ""
@IBAction func postbuttonaddpost(_ sender: UIButton) {
var ref: DatabaseReference!
ref = Database.database().reference()
let postvalue = ref.child("All Post").childByAutoId()
let postkeyvalue = postvalue.key!
postvalue.child("Post Content").setValue(postcontent.text)
postvalue.child("Post Author").setValue(currentuser)
officialpostkeyvalue = postkeyvalue
self.performSegue(withIdentifier: "addpostbacktotimeline", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let tabCtrl = segue.destination as! UITabBarController
let tweetviewcontroller = tabCtrl.viewControllers![0] as! TweetViewController
tweetviewcontroller.possstkeystring = officialpostkeyvalue
}
@IBOutlet weak var postcontent: UITextView!
}
Я знаю, что мои имена переменных нестандартны, или то, как я их запрограммировал, может быть не лучшим, но он работает так, как я хочу, просто имя автора не работает ..
Как я это настроил:
Когда пользователь нажимает на сообщение -> он берет тег имени, который у меня есть, и сохраняет его как автора. Затем он сохраняется в базе данных Firebase в древовидном формате.
«Все сообщения» -> Случайный идентификатор -> Имя автора
«Все сообщения» -> Случайный идентификатор -> Содержание сообщения
Затем я пытаюсь получить имя автора и поместить его в ярлык, и ничего, что я делаю, не работает. пожалуйста помогите!