ツイートのような機能を実装しました。
FirebaseコンソールのFirestore Database内にあるフィールドは
name:, content:,timeStamp:3つとなります。
name,contentはタイトルと本文の様なものです。
下記のコード以外に別ファイルを作り、その中に3つのdictionaryを作り、
それをextensionしてself.initしています。
問題なくツイートはシミュレーターで動作確認済みですが、timeStampだけが反映されません。
何度も確認したのですが、わからない為質問させて頂きます。
よろしくお願いします。
import UIKit import FirebaseFirestore class FirestoreController: UITableViewController { let cellId = "cell" var db:Firestore! var tweetArray = [Tweet]() private var tweetButton: UIBarButtonItem! override func viewDidLoad() { super.viewDidLoad() db = Firestore.firestore() tweetButton = UIBarButtonItem(title: "ツイート", style: .plain, target: self, action: #selector(tweet)) tableView.backgroundColor = .white self.navigationItem.hidesBackButton = false self.navigationItem.rightBarButtonItem = tweetButton self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") loadData() checkForUpdates() } func loadData() { db.collection("tweets").getDocuments() { querySnapshot, error in if let error = error { print("(error.localizedDescription)") }else{ self.tweetArray = querySnapshot!.documents.flatMap({Tweet(dictionary: $0.data())}) DispatchQueue.main.async { self.tableView.reloadData() } } } } func checkForUpdates() { db.collection("tweets").whereField("timeStamp", isGreaterThan: Date()) .addSnapshotListener { (querySnapshot, error) in guard let snapshot = querySnapshot else { return } snapshot.documentChanges.forEach { diff in if diff.type == .added { self.tweetArray.append(Tweet(dictionary: diff.document.data())!) DispatchQueue.main.async { self.tableView.reloadData() } } } } } //ボタン @objc func tweet(_ sender: Any) { ... //この中身のアラートのコードは省略してます。 //問題なくアラートが表示され、問題なくツイートできています。 ... self.present(composeAlert, animated: true, completion: nil) } override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tweetArray.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) let tweet = tweetArray[indexPath.row] cell.textLabel?.text = "(tweet.name): (tweet.content)" cell.detailTextLabel?.text = "(tweet.timeStamp)" return cell }
回答1件
あなたの回答
tips
プレビュー