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

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

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

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Xcode

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

Swift

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

Q&A

解決済

1回答

1313閲覧

Swift Firebase 直近の予定表示

ysdyk05

総合スコア13

Firebase

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/07/15 05:54

下の画像のように日付と時間を含む予定が格納されているデータベースから、現在の日付、時刻から直近の予定を判別し、画面上に表示したいのですが、うまくいきません。いろいろ試してみて下記のコードまで行ったのですが、getFromFirestore関数のfor文以降が動いていないようで、コンソールに「OK」が出力されません
解決策を教えていただけないでしょうか。
Firestore中身

Swift

1import UIKit 2import Firebase 3 4class HomeViewController: UIViewController { 5 @IBOutlet weak var nextSchedule: UILabel! 6 @IBOutlet weak var kyou: UILabel! 7 8 9 var damy: Int = 0 10 var flag: Int = 0 11 12 var db: Firestore! 13 14 // 現在の日付と時刻 15 static var today = "" 16 static var current = "aaa" 17 18 static var scheduleTime = "" 19 static var scheduleEvent = "" 20 static var userName = "Taro" 21 22 // 現在時刻とイベント時刻の差の絶対値 23 var abs_time = 2400 24 25 // イベントの時間を一時的に保存 26 var tmp_time = "" 27 override func viewDidLoad() { 28 super.viewDidLoad() 29 30 let now = NSDate() 31 let dateFormatter = DateFormatter() 32 let timeFormatter = DateFormatter() 33 dateFormatter.dateFormat = "yyyy/MM/dd" 34 timeFormatter.dateFormat = "HH:mm" 35 nextSchedule.numberOfLines = 0 36 let settings = FirestoreSettings() 37 Firestore.firestore().settings = settings 38 db = Firestore.firestore() 39 getFromFirestore() 40 } 41 42 override func viewWillAppear(_ animated: Bool) { 43 navigationController?.setNavigationBarHidden(true, animated: true 44 ) 45 let now = NSDate() 46 let dateFormatter = DateFormatter() 47 dateFormatter.dateFormat = "yyyy/MM/dd" 48 HomeViewController.today = dateFormatter.string(from: now as Date) 49 kyou.text=HomeViewController.today 50 print(HomeViewController.today 51 52 } 53 54 func nearlyEvent(_ time: String, _ category: String) { 55 let event_time = spiltTime(time) 56 let currunt_time = spiltTime(HomeViewController.current)(HomeViewController.current)") 57 if ((abs(event_time - currunt_time) <= abs_time) && (event_time - currunt_time >= 0)) { 58 abs_time = abs(event_time - currunt_time) 59 HomeViewController.scheduleTime = time 60 HomeViewController.scheduleEvent = category 61 self.nextSchedule.text = HomeViewController.scheduleTime + HomeViewController.scheduleEvent 62 } 63 if (HomeViewController.scheduleTime == HomeViewController.current) { 64 abs_time = 2400 65 self.nextSchedule.text = "" 66 } 67 } 68 69 func spiltTime(_ time: String) -> Int { 70 let split_time = time.components(separatedBy: ":") 71 return Int(split_time[0] + split_time[1])! 72 } 73 74 func changeFlag(_ category: String) -> Int { 75 switch category { 76 case "食事": 77 return 1 78 case "勉強": 79 return 2 80 case "ハミガキ": 81 return 3 82 case "就寝": 83 return 4 84 case "起床": 85 return 5 86 case "薬": 87 return 6 88 case "その他": 89 return 7 90 default: 91 return 0 92 } 93 } 94 95 @objc func getFromFirestore() { 96 let _: Void = db.collection("Taro") 97 .whereField("date", isEqualTo: HomeViewController.today) 98 .getDocuments() { (querySnapshot, err) in 99 if let err = err { 100 print("Error getting documents: (err)") 101 } else { 102 for document in querySnapshot!.documents { 103 print("(document.documentID) => (document.data())") 104 let sample: Dictionary = document.data() 105 let time = sample["time"] as! String 106 let category = sample["category"] as! String 107 self.nearlyEvent(time, category) 108 self.flag = self.changeFlag(HomeViewController.scheduleEvent) 109 print("OK") 110 } 111 } 112 } 113 } 114} 115

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

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

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

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

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

ysdyk05

2020/07/16 04:54

すみません、ご指摘ありがとうございます。こっちの方が伝わりやすいと思いますのでhttps://teratail.com/questions/277546を消しておきます。 ↑の質問で追記・修正の依頼を ------------------------------------------------------------------------------------------------------------------- querySnapshotがnil、もしくは、querySnapshot!.documentsがカラではないですか? OKの前の、 print("\(document.documentID) => \(document.data())") これは表示されているのでしょうか? ------------------------------------------------------------------------------------------------------------------ といただきました。 まず、OK前のprint("\(document.documentID) => \(document.data())")は表示されていません。 querySnapshotがnil、もしくは、querySnapshot!.documentsがカラではないか、についてですが、firebaseのサイト(https://firebase.google.com/docs/firestore/query-data/queries?hl=ja#swift) に乗っているコードをそのまま貼り付けたもので、原因を調べたのですが、よく理解できていません。 もしよろしければどうするべきなのか教えていただくことはできませんでしょうか。
fuzzball

2020/07/16 05:08 編集

ちなみに、エラー("Error getting documents: \(err)")も出てないんですよね? querySnapshot!.documentsの確認方法ですが、 for document in querySnapshot!.documents { の上の行に、 print( querySnapshot!.documents ) を追加して確認して下さい。
ysdyk05

2020/07/16 05:47 編集

エラー("Error getting documents: \(err)")は出ていません。 print( querySnapshot!.documents )を追加して確認した所、[ ] と出たので、空でした
fuzzball

2020/07/16 06:43

HomeViewController.today はどうなってますか?
ysdyk05

2020/07/16 06:50

ご返信ありがとうございます???? HomeViewController.todayは 2020/07/16 です
fuzzball

2020/07/16 06:58 編集

Firebaseのことを知らないので的確なコメントは出来ないのですが、条件に該当するデータは存在するのでしょうか? もっと分かりやすい条件だとどうなるでしょうか? (例) .whereField("comment", isEqualTo: "みがく")
ysdyk05

2020/07/16 07:14

dateが2020/07/16のデータは存在します。 .whereField("comment", isEqualTo: "みがく")でやってみた所、できました。 また、今 .whereField("date", isEqualTo: "2020/07/16")でやってみてもできました。 HomeViewController.todayに原因があるのでしょうか...
fuzzball

2020/07/16 07:20

>>HomeViewController.todayは 2020/07/16 です これどこで調べたんでしょうか‥。 HomeViewController.today を設定する前にgetFromFirestore()を呼び出してるから、HomeViewController.today = "" になってませんか?
ysdyk05

2020/07/16 07:33

getFromFirestore()のfor document in querySnapshot!.documents { の前で print(HomeViewController.today)をやった所2020/07/16と出ました。 getFromFirestore()の場所をずらしたらしっかりできました... 丁寧にご対応いただき本当にありがとうございました。 また、行き詰まったらteratailに質問するかもしれません、その時はどうかよろしくお願いいたします笑
fuzzball

2020/07/16 07:36

自己解決でクローズしておいて下さい。
guest

回答1

0

自己解決

fuzzballさんありがとうございました

投稿2020/07/16 07:42

ysdyk05

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問