を使用していますhttps://www.firebase.com/docs/ios/guide/retrieving-data.html
あなたLink
は.child()
パラメータ"user"
の概要とのIDである:ここで
は、そのドキュメントへのリンクありユーザー/メッセージ:
autoID
をメッセージ辞書に保存すると、それを参照できるようになり、call the message directly
。そうすれば、必要なメッセージに ".child()
"が表示され、Firebase全体を照会するのではなく "間接的に" direct link
が作成されます。
あなたがそのようなメッセージを保存する必要があり、その目的のために
:
ロードあなたの配列にすべてのメッセージ:あなたはどちらか次にsaveMessages(userID: myUserID, messages: message)
で関数を呼び出す
//for my example I've created a struct: Message
struct Message {
var message: String = ""
var user: String = ""
var messageID: String = ""
}
func saveMessages(userID: String, message: Message) { // or your dictionary
// here you set an auto id
let reference = firebase.child(userID).childByAutoId()
// here you save the id into your messages dict/model
message.messageID = reference.key
// here you save the dict/model into your firebase
reference.setValue(message) { (error, ref) -> Void in
if error != nil {
print("\(error)")
}
}
}
構造体:
// we create and instantiate an Array of Message
var messages: [Message] = []
func loadAllMessages(userID: String) {
//we query all messages from the certain user
let usersRef = firebase.child(userID).child("messages")
usersRef.observeEventType(.Value, withBlock: { snapshot in
if snapshot.exists() {
// since we use observeEventType we need to clear our Array
// everytime our snapshot exists so we're not downloading
// single messages multiple times
self.messages.removeAll()
// I'm always sorting for date
// even if your dict has no date, it doesnt crash
let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date",ascending: false)])
// now we loop through sorted to get every single message
for element in sorted {
let message = element.valueForKey("message")! as? String
let name = element.valueForKey("name")! as? String
let messageID = element.valueForKey("messageID")! as? String
// we're creating a message model
let m = Message(message: message!, name: name!, messageID: messageID!)
// and saving it into our array
self.messages.append(m)
}
}
})
}
または、すでに知っているIDでのメッセージ。
func loadSingleMessages(userID: String, messageID: String) {
// we use the direct "link" to our message
let usersRef = firebase.child(userID).child(messageID)
usersRef.observeEventType(.Value, withBlock: { snapshot in
if snapshot.exists() {
let message = snapshot.valueForKey("message")! as? String
let name = snapshot.valueForKey("name")! as? String
let messageID = snapshot.valueForKey("messageID")! as? String
// create the model
let m = Message(message: message!, name: name!, messageID: messageID!)
// and save it to our Array
self.messages.append(m)
}
})
}
概要:全体Firebaseを通じて照会するとループに希望のメッセージにあなたの方法を持ってすることなく、直接、あなたのメッセージを呼び出すことができるように、あなたはそれを保存し、生成されたautoID
を知っておく必要がありますし、そのIDを持つ参照を照会します。
たとえば、メッセージIDだけを格納しているFirebaseでユーザの中に配列を設定することができます。そしてそれらを使ってあなたが望むメッセージを問い合わせることができます。あなたは、あなたは、ダウンロードしてFirebaseから自分のUserモデルをインスタンス化した後
struct User {
var userID: String = ""
var name: String = ""
var email: String = ""
var profileImageURL = ""
var messages: [String] = []
}
let user = User()
:このような
何か
// for every message in our user.messages we call our function
for message in user.messages {
loadSingleMessages(userID: user.userID, messageID: message)
}
をところで、メッセージIDができるようにすることも重要です特定のメッセージを削除または編集します。
この詳細な回答をいただきありがとうございます。私は今日これを試し、あなたに報告します! –
あなたは大歓迎です。ハッピーコーディング –