teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

誤字がありました。

2021/06/13 04:03

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

title CHANGED
File without changes
body CHANGED
@@ -36,7 +36,7 @@
36
36
  (value)
37
37
  """)
38
38
 
39
- self?.unReadAry.removeAll()
39
+ self.unReadAry.removeAll()
40
40
  value.forEach({ data in
41
41
 
42
42
  let userIdPartner = data["userIdPartner"] as! String

5

誤字がありました。

2021/06/13 04:03

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

title CHANGED
File without changes
body CHANGED
@@ -9,12 +9,14 @@
9
9
  ### 発生している問題・エラーメッセージ
10
10
  queryを指定せずDatabaseから呼び出した場合は上手く配列に入れることができました。
11
11
  しかし、queryOrderedByChildとqueryEqualToValueを使った場合だとなぜか上手く[[String:Any]]に入れられないのです。
12
- 現場 DataSnapShot、下記のコードでいいますとsnapShotsをprintするとデバッグでDataを取り出せたことは確認できています。
13
12
 
14
13
  ### 該当のソースコード
15
14
 
16
- 簡単にご説明するとChatアプリの各部屋がconversationsを示していて、
15
+ 簡単にご説明するとChatアプリの各部屋をconversationsで示していて、
16
+ idは各部屋に割り振ってあります。
17
- idは各部屋に割り振ってあります。そのidで各部屋が持つメッセージ群を呼び出しております。
17
+ そのidで各部屋が持つメッセージ群を呼び出しております。
18
+ 現状 DataSnapShot、下記のコードでいいますとsnapShotsをprintすると、
19
+ デバッグでDataを取り出せたことは確認できていますが、if文後の[[String:Any]]で、queryを使わなければ全て収まっていたはずの各部屋メッセージ群が、一つの部屋のメッセージ群しか入れられないのです。
18
20
 
19
21
  ```ここに言語名を入力
20
22
  conversations.forEach({conversation in
@@ -95,14 +97,10 @@
95
97
  Messageという名前で構造体定義した配列に入れたり、
96
98
  見当違いかもしれませんが、DataBaseのセキュリティルールが影響するのかと思い、色々変えてみましたが変わらず。
97
99
 
100
+ どなたか同じ状況で解決された方がいらっしゃればご教授いただけると大変助かります。
101
+ 今一度何卒よろしくお願いします。
98
102
 
99
103
 
100
- Database.database().reference().child("(id)/messages").observe
101
-
102
- Database.database().reference().child("(id)/messages").queryOrdered(byChild: "is_read").queryEqual(toValue: false).observe
103
-
104
- に変えた場合他の何かも変わるのでしょうか?
105
-
106
104
  ### 補足情報
107
105
  念のためルール定義はこちらです。
108
106
  ![イメージ説明](6e88824add7fb12ac7a1cb74e05af189.png)

4

誤字がありました。

2021/06/13 04:00

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

title CHANGED
File without changes
body CHANGED
@@ -12,9 +12,10 @@
12
12
  現場 DataSnapShot、下記のコードでいいますとsnapShotsをprintするとデバッグでDataを取り出せたことは確認できています。
13
13
 
14
14
  ### 該当のソースコード
15
- is_readはfalseで未読を返します。 
15
+
16
- conversationsは各部屋の情報で最新のメッセージだけされています。
16
+ 簡単にご説明するとChatアプリの各部屋がconversationsをていて、
17
- 下記のコードその各部屋のidをforeachを使って各部屋メッセージ呼び出してます。
17
+ idは各部屋に割り振ってあります。そのidで各部屋が持つメッセージ群を呼び出しております。
18
+
18
19
  ```ここに言語名を入力
19
20
  conversations.forEach({conversation in
20
21
  let id = conversation.id
@@ -94,6 +95,8 @@
94
95
  Messageという名前で構造体定義した配列に入れたり、
95
96
  見当違いかもしれませんが、DataBaseのセキュリティルールが影響するのかと思い、色々変えてみましたが変わらず。
96
97
 
98
+
99
+
97
100
  Database.database().reference().child("(id)/messages").observe
98
101
 
99
102
  Database.database().reference().child("(id)/messages").queryOrdered(byChild: "is_read").queryEqual(toValue: false).observe

3

修正コードの追加

2021/06/13 03:48

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- Firebase RealTimeDatabaseでchatアプリの未読数を取得したい
1
+ Firebase query使って取得したdataを[[String:Any]]に入れた
body CHANGED
@@ -2,19 +2,15 @@
2
2
 
3
3
  いつも大変お世話になってます。
4
4
 
5
- 今回chat機能の未読数カウントを実装中で、FirebaseのRealTime Databaseから条件付で呼び出したDataを、
5
+ FirebaseのRealTime DatabaseからqueryOrderedByChild、queryEqualToValueで呼び出したDataを、
6
6
  用意した[[String:Any]]配列にどうしても上手く入れらずお世話になりたく書き込ませていただきました。
7
7
  至らないところが多々あるかと思います、よろしくお願いいたします。
8
8
 
9
9
  ### 発生している問題・エラーメッセージ
10
- 条件を指定せずDatabaseから呼び出した場合は上手く配列に入れることができ未読数をカウントできました。
10
+ queryを指定せずDatabaseから呼び出した場合は上手く配列に入れることができました。
11
+ しかし、queryOrderedByChildとqueryEqualToValueを使った場合だとなぜか上手く[[String:Any]]に入れられないのです。
11
- しかしこれでは周知通り毎度過去の膨大なメッセジに呼び出しmemoryや取得に時間費やししまいます。
12
+ 現場 DataSnapShot下記いいますとsnapShotsprintするとデバッグでDataを取り出せたことは確認できています。
12
- そこを危惧して条件指定し呼び出しをと思いました。
13
13
 
14
- queryOrderedByChildとqueryEqualToValueを使ったのですが、それだとなぜか上手く取り出せないのです。
15
-
16
-
17
-
18
14
  ### 該当のソースコード
19
15
  is_readはfalseで未読を返します。 
20
16
  conversationsは各部屋の情報で最新のメッセージだけが表示されています。
@@ -43,8 +39,8 @@
43
39
  let userIdPartner = data["userIdPartner"] as! String
44
40
  let is_read = data["is_read"] as! Bool
45
41
  if userIdPartner == currentUserId && is_read == false{
46
- self?.unReadAry.append(is_read)
42
+ self.unReadAry.append(is_read)
47
- print(self!.unReadAry)
43
+
48
44
  }
49
45
  })
50
46
  }
@@ -52,10 +48,6 @@
52
48
  })
53
49
  ```
54
50
  下記は print(snapShots) のデバッグ表記です。
55
-
56
- 豊臣秀吉さんとの会話 is_readがfalse、すなわち未読である7番目と8番目のメッセージが呼び出された。
57
- 織田信長さんとの会話 is_readがfalse、すなわち未読である0番目のメッセージが呼び出された。
58
-
59
51
  ```
60
52
  Snap (messages) {
61
53
  7 = {

2

誤字がありました。

2021/06/12 16:26

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

title CHANGED
File without changes
body CHANGED
@@ -102,7 +102,12 @@
102
102
  Messageという名前で構造体定義した配列に入れたり、
103
103
  見当違いかもしれませんが、DataBaseのセキュリティルールが影響するのかと思い、色々変えてみましたが変わらず。
104
104
 
105
+ Database.database().reference().child("(id)/messages").observe
106
+
107
+ Database.database().reference().child("(id)/messages").queryOrdered(byChild: "is_read").queryEqual(toValue: false).observe
105
108
 
109
+ に変えた場合他の何かも変わるのでしょうか?
110
+
106
111
  ### 補足情報
107
112
  念のためルール定義はこちらです。
108
113
  ![イメージ説明](6e88824add7fb12ac7a1cb74e05af189.png)

1

誤字がありました。

2021/06/11 15:25

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

title CHANGED
File without changes
body CHANGED
@@ -32,7 +32,11 @@
32
32
  print(snapShots) //FireBaseからdataは取得できています
33
33
 
34
34
  if let value = snapShots.value as? [[String:Any]]{
35
-
35
+ print("""
36
+ [[String:Any]]でoptinalをifで処理後
37
+ (value)
38
+ """)
39
+
36
40
  self?.unReadAry.removeAll()
37
41
  value.forEach({ data in
38
42