使用自动增量 Swift 3 在 Firebase 数据库中存储帖子(图像、标题)
Posted
技术标签:
【中文标题】使用自动增量 Swift 3 在 Firebase 数据库中存储帖子(图像、标题)【英文标题】:Storing posts (image, caption) in Firebase database with auto increment Swift 3 【发布时间】:2016-12-07 14:09:24 【问题描述】:我正在尝试将用户帖子存储在我的 Firebase 数据中,如下所示:
我已使用以下代码成功将每个图像存储在存储中:
let storage = FIRStorage.storage()
let data = UIImagePNGRepresentation(postImage!)
// guard for user id
guard let uid = FIRAuth.auth()?.currentUser?.uid else
return
let photosRef = storage.reference().child("posts")
let imageName = NSUUID().uuidString
let photoRef = photosRef.child("\(uid)")
photoRef.child("\(imageName)").put(data!, metadata: nil)(metaData,error) in
if let error = error
print("there was an error")
print(error.localizedDescription)
return
else
// store downloadURL
let downloadURL = metaData!.downloadURL()!.absoluteString
let values = ["uid": uid, "caption": caption, "download_url": downloadURL]
// store downloadURL at database
let databaseRef = FIRDatabase.database().reference()
// store values in posts/post_1 (post_1..post_2 etc)
但是,我无法将 downloadURL(值数组)存储在我的帖子数据库中,因为我不知道如何为 post 1
post 2
post 3
等设置增量值
有没有更好的方法将帖子存储在posts
数据库中而不需要增量值?
感谢任何帮助。
谢谢!
【问题讨论】:
Firebase documentation on storing lists of data 中有一个完整的部分。您会注意到,这部分没有像您尝试使用的那样使用索引,原因有很多。如果您想了解有关这些原因的更多信息,请阅读此classic blog post。 感谢您的博文 -- 我之前已通读,但会再次学习 Firebase 的最佳实践 【参考方案1】:有多种方法可以存储增量值 - 这完全取决于您希望如何存储这些值以及您将如何检索和使用它们。
一般过程是使用 childByAutoId 创建父节点 - Firebase 会为您生成不同的节点名称。
let ref = rootNode.childByAutoid()
ref.setValue("my value")
这将导致节点具有 Firebase 生成的密钥
root_node
-Ynaosdokasodkpasd: "my Value"
话虽如此,很难以有意义的方式对它们进行排序,因此您可能需要添加能够指定顺序的节点
let ref = rootNode.childByAutoid()
let dict = ["text": "my value", timeStamp: "20161207131600"]
ref.setValue(dict)
导致
-Ynaosdokasodkpasd
text: "my value"
timeStamp: "20161207131600"
然后,您可以使用时间戳在 Firebase 查询中对数据进行排序。
【讨论】:
非常感谢!就像你建议的那样,我最终使用了 childByAutoid。以上是关于使用自动增量 Swift 3 在 Firebase 数据库中存储帖子(图像、标题)的主要内容,如果未能解决你的问题,请参考以下文章
可以将服务器端逻辑添加到 firebase 以实现自动增量密钥吗?
Firebase 在 Swift 中检索低于自动 ID 的数据