質問編集履歴

9

タイトルの変更、試したこと追加

2020/03/09 09:08

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
@@ -1 +1 @@
1
- Firebaseから取得しfor文で回したデータを非同期処理後も順番通りしたい
1
+ 2回目以降のfor文をFirebase非同期処理が終わったしたい(並行処理をさせたくない)
test CHANGED
@@ -426,6 +426,16 @@
426
426
 
427
427
 
428
428
 
429
+ `追記`
430
+
431
+ 調べていたらforEach文というのが出てきたので、それを試してみましたがダメでした。
432
+
433
+ [参考にしたサイト](https://teratail.com/questions/219325)
434
+
435
+
436
+
437
+
438
+
429
439
  ### 補足情報(FW/ツールのバージョン)
430
440
 
431
441
 

8

タイトルの変更

2020/03/09 09:08

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
@@ -1 +1 @@
1
- Firebaseから取得するデータをfor文実行した順番で取したい
1
+ Firebaseから取得for文でしたデータを非同期処理後も順番実装したい
test CHANGED
File without changes

7

質問文の修正

2020/03/09 08:41

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
File without changes
test CHANGED
@@ -414,6 +414,10 @@
414
414
 
415
415
 
416
416
 
417
+ また、Firebase登録されているレストランを一つだけにしてみたらfor文は一度しか動かないので、投稿したユーザーは一致しました。逆にFirebase登録されているレストランを増やすほど、投稿したユーザーとは関係ないユーザーがばらばらに表示されてしまいます。
418
+
419
+
420
+
417
421
  説明が分かりにくかったらすみません。
418
422
 
419
423
  解決方法が分かる方がいましたら、ご回答お願いします。

6

質問文の修正

2020/03/09 06:33

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
File without changes
test CHANGED
@@ -410,9 +410,11 @@
410
410
 
411
411
  クロージャについて調べていたら、`weak self`というのが出てきたのでコードを書いてみたのですが恐らく関係ありませんでした。
412
412
 
413
- Firebaseとの非同期通信終わってからfor文内の処理が動くようにすれば解決できると思うのですが、調べても出てきませんでした。(そもそもそんなやり方が無いのかもしれませんが)
413
+ Firebaseとの非同期通信まで終わった後に、for文内の処理が動くようにすれば解決できると思うのですが、調べても出てきませんでした。(そもそもそんなやり方が無いのかもしれませんが)
414
+
415
+
416
+
414
-
417
+ 説明が分かりにくかったらすみません。
415
-
416
418
 
417
419
  解決方法が分かる方がいましたら、ご回答お願いします。
418
420
 

5

文字の変更

2020/03/09 06:24

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
File without changes
test CHANGED
@@ -34,6 +34,10 @@
34
34
 
35
35
 
36
36
 
37
+ 下のシュミレータ画面とcloud firestoreの画像をみて頂ければ分かるかと思いますが、はっぱを投稿したユーザーは値が反映されているユーザーではありません。
38
+
39
+
40
+
37
41
  ### シュミレータ画面
38
42
 
39
43
  ![![シュミレータ画面](95891a7087dce1d7c87077c2794ab642.gif)](92c23850853098cd130d5651979eeb53.gif)

4

コードの修正

2020/03/09 06:19

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
File without changes
test CHANGED
@@ -184,16 +184,10 @@
184
184
 
185
185
  var storeImage: [String] = []
186
186
 
187
- var postUserNameArray: [String] = []
188
-
189
- var postUserIconArray: [String] = []
190
-
191
187
  var count = 0
192
188
 
193
189
  var storeCount = 0
194
190
 
195
- var viewTapGesture: UITapGestureRecognizer!
196
-
197
191
 
198
192
 
199
193
  // MARK: - Helper Functions
@@ -314,15 +308,11 @@
314
308
 
315
309
  print(postUserIcon)
316
310
 
317
- self.postUserNameArray.append(postUserName)
318
-
319
- self.postUserIconArray.append(postUserIcon)
320
-
321
311
 
322
312
 
323
313
           // 取得したレストランの情報とユーザーの情報を、引数で渡してレビュー画面を作成
324
314
 
325
- self.configureViewController(storeName: self.storeName[self.storeCount], storeReview: self.storeReview[self.storeCount], storeImage: self.storeImage[self.storeCount], count: self.count, postUserName: self.postUserNameArray[self.storeCount], postUserIcon: self.postUserIconArray[self.storeCount])
315
+ self.configureViewController(storeName: self.storeName[self.storeCount], storeReview: self.storeReview[self.storeCount], storeImage: self.storeImage[self.storeCount], count: self.count, postUserName: postUserName, postUserIcon: postUserIcon)
326
316
 
327
317
  self.storeCount += 1
328
318
 

3

文字の修正

2020/03/09 06:17

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ### 前提・実現したいこと
5
+ ### 前提
6
6
 
7
7
 
8
8
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  またCloud Firestoreにはルートコレクションが2つあります。
16
16
 
17
- Storesコレクションのドキュメントを全て取得し、それをfor文で回します。各ドキュメント内のuserIdの値を取得した後に、それと一致するUserコレクションのドキュメントを参照して、そのドキュメント内にあるuserNameとuserImageを取り出してレビュー画面に投稿したユーザー名とアイコンを反映しています。
17
+ Storesコレクションのドキュメントを全て取得し、それをfor文で回しています。各ドキュメント内のuserIdの値を取得した後に、それと一致するUserコレクションのドキュメントを参照して、そのドキュメント内にあるuserNameとuserImageを取り出してレビュー画面に投稿したユーザー名とアイコンを反映しています。
18
18
 
19
19
 
20
20
 

2

初心者マーク

2020/03/09 06:13

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,7 @@
1
+ こんにちは。お世話になります。
2
+
3
+
4
+
1
5
  ### 前提・実現したいこと
2
6
 
3
7
 

1

質問文の修正

2020/03/09 06:12

投稿

Naoki_Pro
Naoki_Pro

スコア23

test CHANGED
File without changes
test CHANGED
@@ -10,402 +10,420 @@
10
10
 
11
11
  またCloud Firestoreにはルートコレクションが2つあります。
12
12
 
13
- Storesコレクションから全てのドキュメントを取得し、各ドキュメント内のuserIdと一致するものを、Usersコレクションのドキュメントからようとしています。
13
+ Storesコレクションのドキュメントを全て取得し、それをfor文で回します。各ドキュメント内のuserIdの値を取得した後に、それと一致するUserコレクションのドキュメントを参照して、そのドキュメント内にあるuserNameとuserImageをり出てレビュー画面に投稿したユーザー名アイコンを反映しています。
14
-
15
-
16
-
14
+
15
+
16
+
17
- ### 発生している問題
17
+ ### 実現たいこと・起きている問題
18
+
19
+
20
+
18
-
21
+ レビュー画面に値を反映することはできているのですが、投稿したユーザーとは関係ないユーザーの値が反映されてしまうのでそれを解決したいです。
22
+
23
+
24
+
19
-
25
+ ### 考えられる原因
26
+
27
+
28
+
29
+ アプリビルド時のログを見ると、下記のコードで示している箇所まではfor文で実行した通りに処理が走っているのですが、Firebaseとの通信(非同期処理?)後のクロージャがfor文とは関係ない順番で処理が実行されているためレストランを投稿したユーザーと関係無いユーザーの値がレビュー画面に反映させてしまっているのだと考えています。
30
+
31
+
32
+
33
+ ### シュミレータ画面
34
+
35
+ ![![シュミレータ画面](95891a7087dce1d7c87077c2794ab642.gif)](92c23850853098cd130d5651979eeb53.gif)
36
+
37
+
38
+
39
+ ### アプリビルド時のログ画面
40
+
41
+ ![ログ画面](ac3b73fadde7ec4fada56e8a11e28d7b.png)
42
+
43
+
44
+
45
+ ### Cloud Firestoreの構造
46
+
47
+ ![Stores](45499f6a64f3f38bb7aba6a251289888.png)
48
+
49
+ ![Users](926f35d2d964ad482d49f59e05bf6cd5.png)
50
+
51
+
52
+
53
+ ### 該当のソースコード
54
+
55
+
56
+
57
+ `Firebaseと通信するモデルクラス↓`
58
+
59
+ ```Swift
60
+
61
+ import Firebase
62
+
63
+
64
+
65
+ class GetStoreInfo {
66
+
67
+
68
+
69
+ // MARK: - Properties
70
+
71
+ let db = Firestore.firestore()
72
+
73
+
74
+
75
+ // MARK: - Methods
76
+
77
+ func getStoreInfo(completion: @escaping (_ snapShot: QuerySnapshot) -> Void) {
78
+
79
+ let collRef = db.collection("Stores")
80
+
81
+ collRef.getDocuments { [weak self] (snapShot, error) in
82
+
83
+ if let _ = self {
84
+
85
+
86
+
87
+ if error != nil {
88
+
89
+ print("could not get store data..")
90
+
91
+ } else {
92
+
93
+ guard let unwrappedSnapShot = snapShot else { return }
94
+
95
+ completion(unwrappedSnapShot)
96
+
97
+ }
98
+
99
+
100
+
101
+ }
102
+
103
+
104
+
105
+ }
106
+
107
+ }
108
+
109
+
110
+
111
+ func getPostUserInfo(userId: String, storeName: String, storeReview: String ,completion: @escaping (_ snapShot: DocumentSnapshot) -> Void) {
112
+
113
+ print("getPostUserInfoメソッドだよ")
114
+
115
+ print(userId)
116
+
117
+ let docRef = db.collection("Users").document(userId)
118
+
119
+ // ここまではfor文で順番通りに動く⬆️
120
+
121
+
122
+
123
+ // ここからfor文での順番通りに動かなくなり順番が狂う⬇️
124
+
125
+ docRef.getDocument { [weak self] (snapShot, error) in
126
+
127
+ if let _ = self {
128
+
129
+
130
+
131
+ print("クロージャに入ったよ")
132
+
133
+ guard let unwrappedSnapShot = snapShot else { return }
134
+
135
+ print("アンラップしたよ")
136
+
137
+ completion(unwrappedSnapShot)
138
+
139
+
140
+
141
+ }
142
+
143
+ }
144
+
145
+ }
146
+
147
+ }
20
148
 
21
149
  ```
22
150
 
23
- for文で
24
-
25
- Storesコレクションからレストランの情報を取得し、レビュー画面に表示することはできているのですが投稿したユーザーが一致せず関係ないユーザーが表示されてしまいます。
151
+
152
+
153
+ `ViewController↓`
154
+
155
+ ```Swift
156
+
157
+ import UIKit
158
+
159
+ import GoogleMaps
160
+
161
+
162
+
163
+ class MapViewController: UIViewController {
164
+
165
+
166
+
167
+ // MARK: - Properties
168
+
169
+ var mapView: MapView!
170
+
171
+ var delegate: MapViewControllerDelegate?
172
+
173
+ var storeModel: GetStoreInfo!
174
+
175
+ var storeDetailViewControllers: [StoreDetailViewController] = []
176
+
177
+ var storeName: [String] = []
178
+
179
+ var storeReview: [String] = []
180
+
181
+ var storeImage: [String] = []
182
+
183
+ var postUserNameArray: [String] = []
184
+
185
+ var postUserIconArray: [String] = []
186
+
187
+ var count = 0
188
+
189
+ var storeCount = 0
190
+
191
+ var viewTapGesture: UITapGestureRecognizer!
192
+
193
+
194
+
195
+ // MARK: - Helper Functions
196
+
197
+ override func viewDidLoad() {
198
+
199
+ super.viewDidLoad()
200
+
201
+
202
+
203
+ storeDetailViewControllers.removeAll()
204
+
205
+ storeName.removeAll()
206
+
207
+ storeReview.removeAll()
208
+
209
+ storeName.removeAll()
210
+
211
+ postUserNameArray.removeAll()
212
+
213
+ postUserIconArray.removeAll()
214
+
215
+      getStoresData()
216
+
217
+ }
218
+
219
+
220
+
221
+ func getStoresData() {
222
+
223
+
224
+
225
+ print("start get stores data..")
226
+
227
+ storeModel = GetStoreInfo()
228
+
229
+ storeModel.getStoreInfo { [weak self] (snapShot) in
230
+
231
+ if let self = self {
232
+
233
+ // for文でドキュメントを順番に取得
234
+
235
+ for document in snapShot.documents {
236
+
237
+ let storeData = document.data()
238
+
239
+ guard let latitude = storeData["latitude"] as? Double, let longitude = storeData["longitude"] as? Double, let storeName = storeData["storeName"] as? String, let storeImage = storeData["storeImage"] as? String, let storeReview = storeData["storeImpression"] as? String, let userId = storeData["userId"] as? String else { return }
240
+
241
+
242
+
243
+
244
+
245
+ self.configureMakerInMap(latitude: latitude, longitude: longitude, storeName: storeName, count: self.count, storeReview: storeReview, storeImage: storeImage, userId: userId)
246
+
247
+ self.count += 1
248
+
249
+ }
250
+
251
+ }
252
+
253
+
254
+
255
+
256
+
257
+ }
258
+
259
+
260
+
261
+ }
262
+
263
+
264
+
265
+ func configureMakerInMap(latitude: Double, longitude: Double, storeName: String, count: Int, storeReview: String, storeImage: String, userId: String) {
266
+
267
+
268
+
269
+ print("configure maker..")
270
+
271
+ let position = CLLocationCoordinate2DMake(latitude, longitude)
272
+
273
+ let marker = GMSMarker(position: position)
274
+
275
+ marker.title = storeName
276
+
277
+      // markerの識別子
278
+
279
+ marker.identifier = count
280
+
281
+ marker.map = mapView.mapView
282
+
283
+ // for文で順番に取得した値を配列に入れる
284
+
285
+ self.storeName.append(storeName)
286
+
287
+ self.storeReview.append(storeReview)
288
+
289
+ self.storeImage.append(storeImage)
290
+
291
+ print(userId)
292
+
293
+ self.storeModel.getPostUserInfo(userId: userId, storeName: storeName, storeReview: storeReview) { [weak self] (snapShot) in
294
+
295
+ if let self = self {
296
+
297
+          // クロージャから出てきたこの場所で順番がおかしくなる
298
+
299
+ let userInfo = snapShot.data()
300
+
301
+ print("0")
302
+
303
+ print("出てきたよ")
304
+
305
+
306
+
307
+ guard let postUserName = userInfo!["userName"] as? String, let postUserIcon = userInfo!["userImage"] as? String else { return }
308
+
309
+ print(postUserName)
310
+
311
+ print(postUserIcon)
312
+
313
+ self.postUserNameArray.append(postUserName)
314
+
315
+ self.postUserIconArray.append(postUserIcon)
316
+
317
+
318
+
319
+          // 取得したレストランの情報とユーザーの情報を、引数で渡してレビュー画面を作成
320
+
321
+ self.configureViewController(storeName: self.storeName[self.storeCount], storeReview: self.storeReview[self.storeCount], storeImage: self.storeImage[self.storeCount], count: self.count, postUserName: self.postUserNameArray[self.storeCount], postUserIcon: self.postUserIconArray[self.storeCount])
322
+
323
+ self.storeCount += 1
324
+
325
+ }
326
+
327
+ }
328
+
329
+
330
+
331
+
332
+
333
+ }
334
+
335
+
336
+
337
+ func configureViewController(storeName: String, storeReview: String, storeImage: String, count: Int, postUserName: String, postUserIcon: String) {
338
+
339
+
340
+
341
+ storeDetailViewControllers.append(StoreDetailViewController(storeName: storeName, storeReview: storeReview, storeImage: storeImage, postUserName: postUserName, postUserIcon: postUserIcon,count: count))
342
+
343
+
344
+
345
+ }
346
+
347
+
348
+
349
+ }
350
+
351
+
352
+
353
+ // Markerに識別子を持たせるための変数
354
+
355
+ extension GMSMarker {
356
+
357
+ var identifier: Int {
358
+
359
+ set(identifier) {
360
+
361
+ self.userData = identifier
362
+
363
+ }
364
+
365
+
366
+
367
+ get {
368
+
369
+ return self.userData as! Int
370
+
371
+ }
372
+
373
+ }
374
+
375
+ }
376
+
377
+
378
+
379
+ // MARK: Delegate
380
+
381
+ extension MapViewController: GMSMapViewDelegate {
382
+
383
+
384
+
385
+ func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) {
386
+
387
+ print(marker.identifier)
388
+
389
+ let navStoreDetailViewController = UINavigationController(rootViewController: storeDetailViewControllers[marker.identifier])
390
+
391
+ navStoreDetailViewController.modalPresentationStyle = .fullScreen
392
+
393
+ present(navStoreDetailViewController, animated: true, completion: nil)
394
+
395
+ print("did tap info window of maker..")
396
+
397
+ }
398
+
399
+
400
+
401
+ }
402
+
403
+
26
404
 
27
405
  ```
28
406
 
29
407
 
30
408
 
31
- ### シュミレータ画面
32
-
33
- ![![シュミレータ画面](95891a7087dce1d7c87077c2794ab642.gif)](92c23850853098cd130d5651979eeb53.gif)
34
-
35
-
36
-
37
- ### アプリビルド時のログ画面
38
-
39
- ![ログ画面](ac3b73fadde7ec4fada56e8a11e28d7b.png)
40
-
41
-
42
-
43
- ### 該当のソースコード
44
-
45
-
46
-
47
- `Firebaseと通信するモデルクラス↓`
48
-
49
- ```Swift
50
-
51
- import Firebase
52
-
53
-
54
-
55
- class GetStoreInfo {
56
-
57
-
58
-
59
- // MARK: - Properties
60
-
61
- let db = Firestore.firestore()
62
-
63
-
64
-
65
- // MARK: - Methods
66
-
67
- func getStoreInfo(completion: @escaping (_ snapShot: QuerySnapshot) -> Void) {
68
-
69
- let collRef = db.collection("Stores")
70
-
71
- collRef.getDocuments { [weak self] (snapShot, error) in
72
-
73
- if let _ = self {
74
-
75
-
76
-
77
- if error != nil {
78
-
79
- print("could not get store data..")
80
-
81
- } else {
82
-
83
- guard let unwrappedSnapShot = snapShot else { return }
84
-
85
- completion(unwrappedSnapShot)
86
-
87
- }
88
-
89
-
90
-
91
- }
92
-
93
-
94
-
95
- }
96
-
97
- }
98
-
99
-
100
-
101
- func getPostUserInfo(userId: String, storeName: String, storeReview: String ,completion: @escaping (_ snapShot: DocumentSnapshot) -> Void) {
102
-
103
- print("getPostUserInfoメソッドだよ")
104
-
105
- print(userId)
106
-
107
- let docRef = db.collection("Users").document(userId)
108
-
109
- // ここまではfor文で順番通りに動く⬆️
110
-
111
-
112
-
113
- // ここからfor文での順番通りに動かなくなり順番が狂う⬇️
114
-
115
- docRef.getDocument { [weak self] (snapShot, error) in
116
-
117
- if let _ = self {
118
-
119
-
120
-
121
- print("クロージャに入ったよ")
122
-
123
- guard let unwrappedSnapShot = snapShot else { return }
124
-
125
- print("アンラップしたよ")
126
-
127
- completion(unwrappedSnapShot)
128
-
129
-
130
-
131
- }
132
-
133
- }
134
-
135
- }
136
-
137
- }
138
-
139
- ```
140
-
141
-
142
-
143
- `ViewController↓`
144
-
145
- ```Swift
146
-
147
- import UIKit
148
-
149
- import GoogleMaps
150
-
151
-
152
-
153
- class MapViewController: UIViewController {
154
-
155
-
156
-
157
- // MARK: - Properties
158
-
159
- var mapView: MapView!
160
-
161
- var delegate: MapViewControllerDelegate?
162
-
163
- var storeModel: GetStoreInfo!
164
-
165
- var storeDetailViewControllers: [StoreDetailViewController] = []
166
-
167
- var storeName: [String] = []
168
-
169
- var storeReview: [String] = []
170
-
171
- var storeImage: [String] = []
172
-
173
- var postUserNameArray: [String] = []
174
-
175
- var postUserIconArray: [String] = []
176
-
177
- var count = 0
178
-
179
- var storeCount = 0
180
-
181
- var viewTapGesture: UITapGestureRecognizer!
182
-
183
-
184
-
185
- // MARK: - Helper Functions
186
-
187
- override func viewDidLoad() {
188
-
189
- super.viewDidLoad()
190
-
191
-
192
-
193
- storeDetailViewControllers.removeAll()
194
-
195
- storeName.removeAll()
196
-
197
- storeReview.removeAll()
198
-
199
- storeName.removeAll()
200
-
201
- postUserNameArray.removeAll()
202
-
203
- postUserIconArray.removeAll()
204
-
205
-      getStoresData()
206
-
207
- }
208
-
209
-
210
-
211
- func getStoresData() {
212
-
213
-
214
-
215
- print("start get stores data..")
216
-
217
- storeModel = GetStoreInfo()
218
-
219
- storeModel.getStoreInfo { [weak self] (snapShot) in
220
-
221
- if let self = self {
222
-
223
- // for文でドキュメントを順番に取得
224
-
225
- for document in snapShot.documents {
226
-
227
- let storeData = document.data()
228
-
229
- guard let latitude = storeData["latitude"] as? Double, let longitude = storeData["longitude"] as? Double, let storeName = storeData["storeName"] as? String, let storeImage = storeData["storeImage"] as? String, let storeReview = storeData["storeImpression"] as? String, let userId = storeData["userId"] as? String else { return }
230
-
231
-
232
-
233
-
234
-
235
- self.configureMakerInMap(latitude: latitude, longitude: longitude, storeName: storeName, count: self.count, storeReview: storeReview, storeImage: storeImage, userId: userId)
236
-
237
- self.count += 1
238
-
239
- }
240
-
241
- }
242
-
243
-
244
-
245
-
246
-
247
- }
248
-
249
-
250
-
251
- }
252
-
253
-
254
-
255
- func configureMakerInMap(latitude: Double, longitude: Double, storeName: String, count: Int, storeReview: String, storeImage: String, userId: String) {
256
-
257
-
258
-
259
- print("configure maker..")
260
-
261
- let position = CLLocationCoordinate2DMake(latitude, longitude)
262
-
263
- let marker = GMSMarker(position: position)
264
-
265
- marker.title = storeName
266
-
267
-      // markerの識別子
268
-
269
- marker.identifier = count
270
-
271
- marker.map = mapView.mapView
272
-
273
- // for文で順番に取得した値を配列に入れる
274
-
275
- self.storeName.append(storeName)
276
-
277
- self.storeReview.append(storeReview)
278
-
279
- self.storeImage.append(storeImage)
280
-
281
- print(userId)
282
-
283
- self.storeModel.getPostUserInfo(userId: userId, storeName: storeName, storeReview: storeReview) { [weak self] (snapShot) in
284
-
285
- if let self = self {
286
-
287
-          // クロージャから出てきたこの場所で順番がおかしくなる
288
-
289
- let userInfo = snapShot.data()
290
-
291
- print("0")
292
-
293
- print("出てきたよ")
294
-
295
-
296
-
297
- guard let postUserName = userInfo!["userName"] as? String, let postUserIcon = userInfo!["userImage"] as? String else { return }
298
-
299
- print(postUserName)
300
-
301
- print(postUserIcon)
302
-
303
- self.postUserNameArray.append(postUserName)
304
-
305
- self.postUserIconArray.append(postUserIcon)
306
-
307
-
308
-
309
-          // 取得したレストランの情報とユーザーの情報を、引数で渡してレビュー画面を作成
310
-
311
- self.configureViewController(storeName: self.storeName[self.storeCount], storeReview: self.storeReview[self.storeCount], storeImage: self.storeImage[self.storeCount], count: self.count, postUserName: self.postUserNameArray[self.storeCount], postUserIcon: self.postUserIconArray[self.storeCount])
312
-
313
- self.storeCount += 1
314
-
315
- }
316
-
317
- }
318
-
319
-
320
-
321
-
322
-
323
- }
324
-
325
-
326
-
327
- func configureViewController(storeName: String, storeReview: String, storeImage: String, count: Int, postUserName: String, postUserIcon: String) {
328
-
329
-
330
-
331
- storeDetailViewControllers.append(StoreDetailViewController(storeName: storeName, storeReview: storeReview, storeImage: storeImage, postUserName: postUserName, postUserIcon: postUserIcon,count: count))
332
-
333
-
334
-
335
- }
336
-
337
-
338
-
339
- }
340
-
341
-
342
-
343
- // Markerに識別子を持たせるための変数
344
-
345
- extension GMSMarker {
346
-
347
- var identifier: Int {
348
-
349
- set(identifier) {
350
-
351
- self.userData = identifier
352
-
353
- }
354
-
355
-
356
-
357
- get {
358
-
359
- return self.userData as! Int
360
-
361
- }
362
-
363
- }
364
-
365
- }
366
-
367
-
368
-
369
- // MARK: Delegate
370
-
371
- extension MapViewController: GMSMapViewDelegate {
372
-
373
-
374
-
375
- func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) {
376
-
377
- print(marker.identifier)
378
-
379
- let navStoreDetailViewController = UINavigationController(rootViewController: storeDetailViewControllers[marker.identifier])
380
-
381
- navStoreDetailViewController.modalPresentationStyle = .fullScreen
382
-
383
- present(navStoreDetailViewController, animated: true, completion: nil)
384
-
385
- print("did tap info window of maker..")
386
-
387
- }
388
-
389
-
390
-
391
- }
392
-
393
-
394
-
395
- ```
396
-
397
-
398
-
399
409
  ### 試したこと
400
410
 
401
411
 
402
412
 
413
+ クロージャについて調べていたら、`weak self`というのが出てきたのでコードを書いてみたのですが恐らく関係ありませんでした。
414
+
415
+ Firebaseとの非同期通信が終わってから次にfor文内の処理が動くようにすれば解決できると思うのですが、調べても出てきませんでした。(そもそもそんなやり方が無いのかもしれませんが)
416
+
417
+
418
+
403
- ここに問題に対て試しことを記載てください
419
+ 解決方法が分かる方がいましたら、ご回答お願います
420
+
404
-
421
+ また別の方法でやりたいことが実装できるのであれば、その方法を教えて頂きたいです。
405
-
406
-
422
+
423
+
424
+
407
- ### 補足情報(FW/ツールのバージョンなど
425
+ ### 補足情報(FW/ツールのバージョン)
408
-
409
-
410
-
426
+
427
+
428
+
411
- ここにより詳細な情報を記載してください。
429
+ xcode 11.3.1