質問編集履歴
9
タイトルの変更、試したこと追加
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
2回目以降のfor文をFirebaseの非同期処理が終わった後に実行したい(並行処理をさせたくない)
|
body
CHANGED
@@ -212,6 +212,11 @@
|
|
212
212
|
解決方法が分かる方がいましたら、ご回答お願いします。
|
213
213
|
また別の方法でやりたいことが実装できるのであれば、その方法を教えて頂きたいです。
|
214
214
|
|
215
|
+
`追記`
|
216
|
+
調べていたらforEach文というのが出てきたので、それを試してみましたがダメでした。
|
217
|
+
[参考にしたサイト](https://teratail.com/questions/219325)
|
218
|
+
|
219
|
+
|
215
220
|
### 補足情報(FW/ツールのバージョン)
|
216
221
|
|
217
222
|
xcode 11.3.1
|
8
タイトルの変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Firebaseから取得
|
1
|
+
Firebaseから取得しfor文で回したデータを非同期処理後も順番通り実装したい
|
body
CHANGED
File without changes
|
7
質問文の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -206,6 +206,8 @@
|
|
206
206
|
クロージャについて調べていたら、`weak self`というのが出てきたのでコードを書いてみたのですが恐らく関係ありませんでした。
|
207
207
|
Firebaseとの非同期通信まで終わった後に、次のfor文内の処理が動くようにすれば解決できると思うのですが、調べても出てきませんでした。(そもそもそんなやり方が無いのかもしれませんが)
|
208
208
|
|
209
|
+
また、Firebase登録されているレストランを一つだけにしてみたらfor文は一度しか動かないので、投稿したユーザーは一致しました。逆にFirebase登録されているレストランを増やすほど、投稿したユーザーとは関係ないユーザーがばらばらに表示されてしまいます。
|
210
|
+
|
209
211
|
説明が分かりにくかったらすみません。
|
210
212
|
解決方法が分かる方がいましたら、ご回答お願いします。
|
211
213
|
また別の方法でやりたいことが実装できるのであれば、その方法を教えて頂きたいです。
|
6
質問文の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -204,8 +204,9 @@
|
|
204
204
|
### 試したこと
|
205
205
|
|
206
206
|
クロージャについて調べていたら、`weak self`というのが出てきたのでコードを書いてみたのですが恐らく関係ありませんでした。
|
207
|
-
Firebaseとの非同期通信
|
207
|
+
Firebaseとの非同期通信まで終わった後に、次のfor文内の処理が動くようにすれば解決できると思うのですが、調べても出てきませんでした。(そもそもそんなやり方が無いのかもしれませんが)
|
208
208
|
|
209
|
+
説明が分かりにくかったらすみません。
|
209
210
|
解決方法が分かる方がいましたら、ご回答お願いします。
|
210
211
|
また別の方法でやりたいことが実装できるのであれば、その方法を教えて頂きたいです。
|
211
212
|
|
5
文字の変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,6 +16,8 @@
|
|
16
16
|
|
17
17
|
アプリビルド時のログを見ると、下記のコードで示している箇所まではfor文で実行した通りに処理が走っているのですが、Firebaseとの通信(非同期処理?)後のクロージャがfor文とは関係ない順番で処理が実行されているためレストランを投稿したユーザーと関係無いユーザーの値がレビュー画面に反映させてしまっているのだと考えています。
|
18
18
|
|
19
|
+
下のシュミレータ画面とcloud firestoreの画像をみて頂ければ分かるかと思いますが、はっぱを投稿したユーザーは値が反映されているユーザーではありません。
|
20
|
+
|
19
21
|
### シュミレータ画面
|
20
22
|
](92c23850853098cd130d5651979eeb53.gif)
|
21
23
|
|
4
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -91,11 +91,8 @@
|
|
91
91
|
var storeName: [String] = []
|
92
92
|
var storeReview: [String] = []
|
93
93
|
var storeImage: [String] = []
|
94
|
-
var postUserNameArray: [String] = []
|
95
|
-
var postUserIconArray: [String] = []
|
96
94
|
var count = 0
|
97
95
|
var storeCount = 0
|
98
|
-
var viewTapGesture: UITapGestureRecognizer!
|
99
96
|
|
100
97
|
// MARK: - Helper Functions
|
101
98
|
override func viewDidLoad() {
|
@@ -156,11 +153,9 @@
|
|
156
153
|
guard let postUserName = userInfo!["userName"] as? String, let postUserIcon = userInfo!["userImage"] as? String else { return }
|
157
154
|
print(postUserName)
|
158
155
|
print(postUserIcon)
|
159
|
-
self.postUserNameArray.append(postUserName)
|
160
|
-
self.postUserIconArray.append(postUserIcon)
|
161
156
|
|
162
157
|
// 取得したレストランの情報とユーザーの情報を、引数で渡してレビュー画面を作成
|
163
|
-
self.configureViewController(storeName: self.storeName[self.storeCount], storeReview: self.storeReview[self.storeCount], storeImage: self.storeImage[self.storeCount], count: self.count, postUserName:
|
158
|
+
self.configureViewController(storeName: self.storeName[self.storeCount], storeReview: self.storeReview[self.storeCount], storeImage: self.storeImage[self.storeCount], count: self.count, postUserName: postUserName, postUserIcon: postUserIcon)
|
164
159
|
self.storeCount += 1
|
165
160
|
}
|
166
161
|
}
|
3
文字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
こんにちは。お世話になります。
|
2
2
|
|
3
|
-
### 前提
|
3
|
+
### 前提
|
4
4
|
|
5
5
|
SwfitとCloud Firestoreを使って、ユーザーがお気に入りのレストランを登録し、それをGoogle Map上でシェアするアプリを開発しています。
|
6
6
|
Map上のマーカーのウィンドウをタップすると画面遷移し、レストランのレビューを見ることができるようにしています。レビュー画面では投稿したユーザーが誰かも分かるようにしています。
|
7
7
|
|
8
8
|
またCloud Firestoreにはルートコレクションが2つあります。
|
9
|
-
Storesコレクションのドキュメントを全て取得し、それをfor文で回します。各ドキュメント内のuserIdの値を取得した後に、それと一致するUserコレクションのドキュメントを参照して、そのドキュメント内にあるuserNameとuserImageを取り出してレビュー画面に投稿したユーザー名とアイコンを反映しています。
|
9
|
+
Storesコレクションのドキュメントを全て取得し、それをfor文で回しています。各ドキュメント内のuserIdの値を取得した後に、それと一致するUserコレクションのドキュメントを参照して、そのドキュメント内にあるuserNameとuserImageを取り出して、レビュー画面に投稿したユーザー名とアイコンを反映しています。
|
10
10
|
|
11
11
|
### 実現したいこと・起きている問題
|
12
12
|
|
2
初心者マーク
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
こんにちは。お世話になります。
|
2
|
+
|
1
3
|
### 前提・実現したいこと
|
2
4
|
|
3
5
|
SwfitとCloud Firestoreを使って、ユーザーがお気に入りのレストランを登録し、それをGoogle Map上でシェアするアプリを開発しています。
|
1
質問文の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,21 +4,26 @@
|
|
4
4
|
Map上のマーカーのウィンドウをタップすると画面遷移し、レストランのレビューを見ることができるようにしています。レビュー画面では投稿したユーザーが誰かも分かるようにしています。
|
5
5
|
|
6
6
|
またCloud Firestoreにはルートコレクションが2つあります。
|
7
|
-
Storesコレクション
|
7
|
+
Storesコレクションのドキュメントを全て取得し、それをfor文で回します。各ドキュメント内のuserIdの値を取得した後に、それと一致するUserコレクションのドキュメントを参照して、そのドキュメント内にあるuserNameとuserImageを取り出してレビュー画面に投稿したユーザー名とアイコンを反映しています。
|
8
8
|
|
9
|
-
###
|
9
|
+
### 実現したいこと・起きている問題
|
10
10
|
|
11
|
-
```
|
12
|
-
for文で
|
13
|
-
|
11
|
+
レビュー画面に値を反映することはできているのですが、投稿したユーザーとは関係ないユーザーの値が反映されてしまうのでそれを解決したいです。
|
14
|
-
```
|
15
12
|
|
13
|
+
### 考えられる原因
|
14
|
+
|
15
|
+
アプリビルド時のログを見ると、下記のコードで示している箇所まではfor文で実行した通りに処理が走っているのですが、Firebaseとの通信(非同期処理?)後のクロージャがfor文とは関係ない順番で処理が実行されているためレストランを投稿したユーザーと関係無いユーザーの値がレビュー画面に反映させてしまっているのだと考えています。
|
16
|
+
|
16
17
|
### シュミレータ画面
|
17
18
|
](92c23850853098cd130d5651979eeb53.gif)
|
18
19
|
|
19
20
|
### アプリビルド時のログ画面
|
20
21
|

|
21
22
|
|
23
|
+
### Cloud Firestoreの構造
|
24
|
+

|
25
|
+

|
26
|
+
|
22
27
|
### 該当のソースコード
|
23
28
|
|
24
29
|
`Firebaseと通信するモデルクラス↓`
|
@@ -199,8 +204,12 @@
|
|
199
204
|
|
200
205
|
### 試したこと
|
201
206
|
|
202
|
-
|
207
|
+
クロージャについて調べていたら、`weak self`というのが出てきたのでコードを書いてみたのですが恐らく関係ありませんでした。
|
208
|
+
Firebaseとの非同期通信が終わってから次にfor文内の処理が動くようにすれば解決できると思うのですが、調べても出てきませんでした。(そもそもそんなやり方が無いのかもしれませんが)
|
203
209
|
|
204
|
-
|
210
|
+
解決方法が分かる方がいましたら、ご回答お願いします。
|
211
|
+
また別の方法でやりたいことが実装できるのであれば、その方法を教えて頂きたいです。
|
205
212
|
|
206
|
-
|
213
|
+
### 補足情報(FW/ツールのバージョン)
|
214
|
+
|
215
|
+
xcode 11.3.1
|