Ich habe ein Tutorial über die Erstellung einer Instragram-esque App verfolgt, und ich habe viel Mühe herauszufinden, wie man einen Beitrag löschen, sowohl von Firebase und von das Futter. Das Bild, das der Benutzer auswählt, oder nimmt mit dieser Funktion auf Firebase Datenbank hochgeladen:Wie lösche ich ein Kind aus Firebase (Swift)
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()
}
, die in Firebase endet wie folgt aussehen:
einem Stapelüberlauf Antwort Im Anschluss fand ich, Ich habe versucht, eine Löschfunktion einzurichten, die beim Drücken der Löschtaste aufgerufen wird. Diese Löschschaltfläche befindet sich in einer "Fotodetail" -Ansicht, auf die der Benutzer durch Tippen auf ein Bild im Bildvorschub gelangt. In dieser Fotodetailansicht wird das Bild in größerem Format angezeigt, zusammen mit einigen anderen Informationen wie etwa:
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)")
}
}
}
und rufen Sie die Funktion hier:
@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)
}
ich bin nicht wirklich verstehen, was ich aber tue, und es ist unnötig zu sagen, die Löschtaste tippen tut im Grunde nichts. Kann jemand mir zeigen, wie man die Löschungfunktion repariert, also kann ich ein Bild/einen Pfosten von der Firebase richtig entfernen?
EDIT: Ich habe var selectedPost: Post!
in meinem PhotoDetailController, die aus dem FeedViewController (Bild Feed) in didSelectItem
wie so übergeben wird:
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)
}
So den Indexpfad hat. Ein weiterer Hinweis zu der obigen Funktion ist, dass var posts = [Post]()
in der FeedViewController instanziiert wird, so dass posts[indexPath.row]
stammt.
Haben Sie ein Post-Objekt in Ihrem DetailView mit den Informationen des aktuellen Posts in der Detailansicht? Oder irgendein Objekt, das die Informationen des Posts enthält (wie die ID)? –
Hey Pieter Ja, ich habe eine Variable, die das Post-Objekt und den Index-Pfad des ausgewählten Bildes aus dem Feed enthält - check my edit, ich lege den Code dort, um es klarer zu machen. – KingTim