私は、Instragram-esqueアプリケーションの作成に関するチュートリアルに従っています。Firebaseからも投稿を削除する方法もわかりませんフィード。ユーザーが選択したり、取るが、この機能をFirebaseデータベースにアップロードされていることをイメージ: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()
}
このように見てFirebaseで終わる:私が見つけた、スタックオーバーフローの答えに続き
、削除ボタンを押したときに呼び出されるdelete関数を設定しようとしました。この削除ボタンは、画像フィード内の画像をタップすることによってユーザーに表示される「写真の詳細」ビューにあります。この写真の詳細ビューは、好きなような他の情報とともに大きなサイズの画像を表示します。
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から正しく投稿するには?
EDIT:
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)
}
だから、それはインデックスパスを持っている:私はそうのようなdidSelectItem
にFeedViewController(画像送り)から渡された私のPhotoDetailController、中var selectedPost: Post!
を持っています。上記の関数に関するもう一つの注意点は、var posts = [Post]()
がFeedViewControllerでインスタンス化されていることです。したがって、posts[indexPath.row]
の由来です。
詳細ビューに現在の投稿の情報が表示されているあなたの詳細ビューに投稿オブジェクトがありますか?または投稿の情報を含むオブジェクト(IDなど)? –
Hey Pieterはい私は、フィードから選択された画像のPostオブジェクトとインデックスパスを保持する変数を持っています。私の編集を確認して、そこにコードを入れて明確にします。 – KingTim