【发布时间】:2017-03-12 15:19:22
【问题描述】:
我一直在关注有关制作 instragram 式应用程序的教程,但在弄清楚如何从 Firebase 和提要中删除帖子时遇到了很多麻烦。使用此功能将用户选择或拍摄的图像上传到 Firebase 数据库:
func uploadToFirebase() {
AppDelegate.instance().showActivityIndicator()
let uid = FIRAuth.auth()!.currentUser!.uid
let ref = FIRDatabase.database().reference()
let storage = FIRStorage.storage().reference(forURL: "gs://cloudcamerattt.appspot.com")
let key = ref.child("posts").childByAutoId().key
let imageRef = storage.child("posts").child(uid).child("\(key).jpg")
let data = UIImageJPEGRepresentation(self.previewImage.image!, 0.6)
let uploadTask = imageRef.put(data!, metadata: nil) { (metadata, error) in
if error != nil {
print(error!.localizedDescription)
AppDelegate.instance().dismissActivityIndicator()
return
}
imageRef.downloadURL(completion: { (url, error) in
if let url = url {
// how do I add date: NSDate in here?
let feed = ["userID" : uid,
"pathToImage" : url.absoluteString,
"likes" : 0,
"author" : FIRAuth.auth()!.currentUser!.displayName!,
"postID" : key] as [String : Any]
let postFeed = ["\(key)" : feed]
ref.child("posts").updateChildValues(postFeed)
AppDelegate.instance().dismissActivityIndicator()
self.dismiss(animated: true, completion: nil)
}
})
}
uploadTask.resume()
}
最终在 Firebase 中看起来像这样:
根据我找到的堆栈溢出答案,我尝试设置一个删除函数,以便在按下删除按钮时调用。此删除按钮位于“照片详细信息”视图上,用户可以通过点击图像馈送中的图像来访问该视图 - 此照片详细信息视图以更大的尺寸显示图像,以及一些其他信息,例如喜欢:
func deletePost(firstTree: String, childIWantToRemove: String) {
let uid = FIRAuth.auth()!.currentUser!.uid
let ref = FIRDatabase.database().reference()
let storage = FIRStorage.storage().reference(forURL: "gs://cloudcamerattt.appspot.com")
let key = ref.child("posts").childByAutoId().key
let imageRef = storage.child("posts").child(uid).child("\(key).jpg")
ref.child("posts").child(key).child("postID").removeValue { (error, ref) in
if error != nil {
print("error \(error)")
}
}
}
并在这里调用函数:
@IBAction func moreButtonPressed(_ sender: AnyObject) {
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
let destroyAction = UIAlertAction(title: "Delete", style: .destructive) { action in
print(action)
let ref = FIRDatabase.database().reference()
let key = ref.child("posts").childByAutoId().key
let firstTree = key
let valueToRemove = "postID"
self.deletePost(firstTree: firstTree, childIWantToRemove: valueToRemove)
}
alertController.addAction(destroyAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true)
}
虽然我并没有真正理解我在做什么,而且不用说点击删除按钮基本上没有任何作用。谁能告诉我如何修复删除功能,以便我可以正确地从 Firebase 中删除图像/帖子?
编辑:我的 PhotoDetailController 中有 var selectedPost: Post!,它是从 didSelectItem 中的 FeedViewController(图像提要)传递的,如下所示:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let photoDetailController = self.storyboard?.instantiateViewController(withIdentifier: "photoDetail") as! PhotoDetailController
photoDetailController.selectedPost = posts[indexPath.row]
present(photoDetailController, animated: true, completion: nil)
}
所以它有索引路径。关于上述函数的另一个注意事项是 var posts = [Post]() 是在 FeedViewController 中实例化的,所以这就是 posts[indexPath.row] 的来源。
【问题讨论】:
-
您的 detailView 中是否有一个 post 对象,其中包含详细视图中当前帖子的信息?或者任何包含帖子信息(如ID)的对象?
-
嘿 Pieter 是的,我有一个变量,它保存 Post 对象和来自提要的所选图像的索引路径 - 检查我的编辑,我把代码放在那里以使其更清晰。
标签: ios swift firebase firebase-realtime-database