1
私はFirebaseをバックエンドとして使用するSwiftで開発したアプリケーションを持っています。ネストされたキーを取得するFirebaseデータベース
私はこのコードを試してみてください、ユーザーの名前を取得し、メッセージでそれらを表示したいMESSAGES
-KW83KXYFzNgo-ibxKQV
--dateSent: "2016-09-09 12:30:23+0000"
--smiley:"smiley1"
--userID:"0QggCGYr46fcz3ak8tcQjsyZ9sJ2"
Users
-- 0QggCGYr46fcz3ak8tcQjsyZ9sJ2
--name: "john"
--photo:"photoURL"
:
self.ref = FIRDatabase.database().reference()
self.ref.child("messages").observe(.childAdded, with: { snapshot in
if let snapshotValue = snapshot.childSnapshot(forPath: Constants.Messages.senderId).value {
FIRDatabase.database().reference().child("Users")
.child(snapshotValue as! String).observe(.value, with: {userSnapshot in
if let userSnapshotValue = userSnapshot.value as? [String:Any] {
self.usernames.append(userSnapshotValue[Constants.UserFields.nickName] as! String)
}
})
結果がこれです:
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
ので、コードが取得しますネストされたクエリは実行されませんでした。どんな命題?
非同期ので、結果が期待どおりに異なる、私は別のクエリを作成しようとすると、ユーザーのクエリが実行されます私はtableviewのセルを作成しますが、私はまだスクロールアップとスクロールのときに特に問題があります。 –
@TawfikBouabidこれは正しくありません。 Firebaseの非同期性により、コードはクロージャ内のコードよりも実行速度が遅くなります。答えを見ると、print文はクロージャー内でのみ発生するので、変数にはデータが入っていなければならず、タイミングは問題ありません。あなたの問題は、セルを作成するときにFirebaseにアクセスすべきではないという点で、より高いレベルにあります。 Firebaseにアクセスして、* array *にデータを取り込んでからtableViewのデータソースとして使用する必要があります。セルはその配列にのみアクセスする必要があり、非常に応答性に優れています。 – Jay