質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

270閲覧

Firestoreのタイムスタンプを表示できません。

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/04/04 02:58

編集2018/04/04 04:50

ツイートのような機能を実装しました。

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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/04/04 05:17

print(tweet.timeStamp)で何が表示されますか?
退会済みユーザー

退会済みユーザー

2018/04/04 05:38 編集

fuzzball様  cell.detailTextLabel?.text = "\(tweet.timeStamp)"の下にprintを入れましたが、何も表示されません。
fuzzball

2018/04/04 05:38

Consoleに表示されないのですか?ということは、tweet.timeStampは空っぽなので画面にも表示されない、ということになりますが。
退会済みユーザー

退会済みユーザー

2018/04/04 06:03 編集

すみません間違えました。ナビバーボタンをタップすると、コンソールにはツイート毎に、2018-04-04 05:47:44 +0000 の形で表示されます。
guest

回答1

0

ベストアンサー

swift

1self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

UITableViewCellをそのまま使っているようですが、この状態ではdetailTextLabelは存在しません。(nilです)
カスタムセルにして下さい。

ちなみに、Storybordを使っていないのでしょうか?

投稿2018/04/04 06:07

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/04 06:09

仰る通りストーリボードを使用せずコードのみです。
退会済みユーザー

退会済みユーザー

2018/04/04 08:04 編集

ご指摘ありがとうございます。 同ファイルに下記のカスタムセル(と呼んでいいのでしょうか?)をinitして、timeStampを表示できました。 class aCell: UITableViewCell { override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: UITableViewCellStyle.subtitle, reuseIdentifier: "cell") } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 表示できた理由は、UITableViewCellStyle以外のバリエーションとしてUITableViewCellStyle.subtitleを用意したからでしょうか? また、timeStampの時刻をFireBaseコンソールで現時刻に修正したのですが、xcodeコンソールではツイート時間がバラバラなのですが、これはDefaultなのでしょうか?
fuzzball

2018/04/04 08:15

言い回しがちょっとおかしいような気がするので改めて書きますが、セルのスタイルを.subtitleにしたことによって、detailTextLabelが使えるようになった、ということです。(.value1や.value2でも大丈夫です) Firebaseのことは分かりません。
退会済みユーザー

退会済みユーザー

2018/04/04 08:27

理解しました。.value1や.value2を確認しました、いろんな表示方法があるんですね 詳しく教えて頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問