ios – 如何从Firebase中删除孩子(Swift)

ios – 如何从Firebase中删除孩子(Swift),第1张

概述我一直在关注制作一个instragram-esque应用程序的教程,我在查找如何从Firebase和feed中删除帖子时遇到了很多麻烦.使用此功能将用户选择或拍摄的图像上传到Firebase数据库: func uploadToFirebase() { AppDelegate.instance().showActivityIndicator() let uid = FIRAuth. 我一直在关注制作一个instragram-esque应用程序的教程,我在查找如何从Firebase和Feed中删除帖子时遇到了很多麻烦.使用此功能将用户选择或拍摄的图像上传到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中看起来像这样:

在我发现堆栈溢出答案之后,我尝试设置一个删除按钮时按下删除按钮的功能.此删除按钮位于“照片详细信息”视图中,用户通过点击图像Feed中的图像来访问该视图 – 此照片详细信息视图以更大的尺寸显示图像,以及其他一些信息,例如:

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中的图像/帖子?

编辑:我有var selectedPost:发布!在我的PhotoDetailController中,它从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中实例化,因此post [indexPath.row]来自.

解决方法 这应该工作.
func deletePost() {  let uID = FIRAuth.auth()!.currentUser!.uID  let storage = Firstorage.storage().reference(forURL: "gs://cloudcamerattt.appspot.com")  // Remove the post from the DB  ref.child("posts").child(selectedPost.postID).removeValue { error in    if error != nil {        print("error \(error)")    }  }  // Remove the image from storage  let imageRef = storage.child("posts").child(uID).child("\(selectedPost.postID).jpg")  imageRef.delete { error in    if let error = error {      // Uh-oh,an error occurred!    } else {     // file deleted successfully    }  }}

另外.childByautoID().key生成一个键,用于将项目插入数据库.您无法使用它获取对现有项目的引用.

总结

以上是内存溢出为你收集整理的ios – 如何从Firebase中删除孩子(Swift)全部内容,希望文章能够帮你解决ios – 如何从Firebase中删除孩子(Swift)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1109360.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存