Currently I add a new post to my Firebase array by observing for the array first, appending my new post, and then updating the ref:
REF_USER.child(UID).observeSingleEventOfType(.Value, withBlock: { snapshot in
if !snapshot.exists() {return}
if let dict = snapshot.value as? Dictionary<String, AnyObject>,
let posts = dict["posts" as? [String] {
posts.append(newPost)
REF_USER.child(UID + "/posts").setValue(posts)
}
}
Is there a way to skip the step of observing, and straight away update posts in an array? Hypothetically, something like:
REF_USER.child(UID + "/posts").addToArray(newPost)
It's generally good practice to avoid array's in Firebase as they are super hard to deal with; the individual elements cannot be accessed directly and they cannot be updated - they have to be re-written.
Not sure why you are going through the steps outlined in your question to add a new post but here's another solution:
thisPostRef = postsRef.childByAutoId //create a new post node
thisPostRef.setValue("here's a new post") //store the post in it
Edit:
This will result in a structure like this
posts
post_id_0: "here's a new post"
post_id_1: "another post"
post_id_2: "cool post"
This structure avoids the pitfalls of arrays.
Another edit. The OP asks how to write it to the users/UID/posts node
usersRef = rootRef.childByAppendingPath("users")
thisUserRef = usersRef.childByAppendingPath(the users uid)
thisUserPostRef = thisUserRef.childByAutoId //create a new post node
thisUserPostRef.setValue("here's a new post") //store the post in it
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With