У меня проблемы с помещением дочернего значения из моей базы данных Firebase в поле метки в ячейке моего табличного представления - PullRequest
2 голосов
/ 15 апреля 2019

Я делаю проект с базой данных 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 в древовидном формате. «Все сообщения» -> Случайный идентификатор -> Имя автора «Все сообщения» -> Случайный идентификатор -> Содержание сообщения

Затем я пытаюсь получить имя автора и поместить его в ярлык, и ничего, что я делаю, не работает. пожалуйста помогите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...