2017-10-04 2 views
0

firebase 데이터베이스에 저장된 테이블 뷰 셀을 스 와이프하여 개체를 삭제하는 기능이 있지만 내 tableView 셀에도 firebase 저장소에 저장된 이미지가 포함되어 있으므로 이미지를 삭제하고 싶습니다. 데이터를 데이터베이스에서 삭제할 때도 저장소에서 어떻게해야합니까? 삭제firebase 보관함에서 이미지를 신속하게 삭제

코드 : 로딩

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if editingStyle == .delete { 

     let name = food[indexPath.row].name 
     let ref = Database.database().reference().child("Recipes") 

     ref.queryOrdered(byChild: "Name").queryEqual(toValue: name).observe(.childAdded, with: { (snapshot) in 
      //Removes deleted cell from firebase 
      snapshot.ref.removeValue(completionBlock: { (error, reference) in 
       if error != nil { 
        print("There has been an error: \(error)") 
       } 
       //Removes deleted cell from array 
       food.remove(at: indexPath.row) 
       //Removes deleted cell from tableView 
       tableView.deleteRows(at: [indexPath], with: .left) 
      }) 
     }) 
    } 
} 

코드 :

let parentRef = Database.database().reference().child("Recipes") 
    let storage = Storage.storage() 

    parentRef.observe(.value, with: { snapshot in 

     if (snapshot.value is NSNull) { 

      // DATA WAS NOT FOUND 
      print("– – – Data was not found – – –") 

     } else { 

      //Clears array so that it does not load duplicates 
      food = [] 

      // DATA WAS FOUND 
      for user_child in (snapshot.children) { 

       let user_snap = user_child as! DataSnapshot 
       let dict = user_snap.value as! [String: String?] 

       //Defines variables for labels 
       let recipeName = dict["Name"] as? String 
       let recipeDescription = dict["Description"] as? String 
       let downloadURL = dict["Image"] as? String 

       let storageRef = storage.reference(forURL: downloadURL!) 

       storageRef.getData(maxSize: 1 * 1024 * 1024) { (data, error) -> Void in 

        let recipeImage = UIImage(data: data!) 

        food.append(Element(name: recipeName!, description: recipeDescription!, image: recipeImage!)) 
        self.tableView.reloadData() 
       } 
      } 
     } 
    }) 

겠습니까도 정말 감사 누군가는 내가이 같은 응용 프로그램에 대해 질문이 다른 질문을 나에게 도움이 될 수있는 경우 : Convert observe .value to .childAdded in swift

편집 :

중포 기지에서 개체를로드 할 때 10

나는 배열에 URL을 추가 한 :

food.append(Element(name: recipeName!, description: recipeDescription!, image: recipeImage!, downloadURL: downloadURL!)) 

을 그리고 이것은 내가 삭제하는 데 사용할 노력하고있어입니다 : 나는 그것을 생각하지 않습니다

let storage = Storage.storage() 
let storageRef = storage.reference() 
let desertRef = storageRef.child(food[indexPath.row].downloadURL) 

//Removes image from storage 
desertRef.delete { error in 
    if let error = error { 
     print(error) 
    } else { 
     // File deleted successfully 
    } 
} 

을 그러나 이미지를 찾는 중 ...이 오류가 발생합니다.

오류 도메인 = FIRStorageErrorDomain 코드 = -13010 "개체 https : /firebasestorage.googleapis.com/v0/b/recipe-app-1b76e.appspot.com/o /B74F604B-68FD-45BB-ABDB-150B03E83A2A.png?alt=media & 토큰 = ae2643c4-647 9-4dc8-b389-d04caac98392가 없습니다. " UserInfo = {object = https : /firebasestorage.googleapis.com/v0/b/recipe-app-1b76e.appspot.com/o/B74F604B-68FD-45BB-ABDB-150B03E83A2A.png? alt = media & token = ae2643c4- ""코드 ": 404, "메시지 ":"찾을 수 없습니다. 개체를 삭제하지 못했습니다. "오류 메시지 : } },

+0

[중포 기지 삭제 문서는] (https://firebase.google.com/docs/storage/ios/delete-files) 아마 해결, 음식 오브젝트 다운로드 URL을 추가 및 삭제 storageRef. let desertRef = storageRef.child (food.downloadUrl) desertRef.delete ... –

+0

@EmreYILMAZ 안녕하세요 제 질문 하단의 편집을보세요 – random1234

+0

@EmreYILMAZ 신경 쓰지 마세요! 그러나 내 다른 질문을 체크 아웃하십시오! https://stackoverflow.com/q/46549312/7109256 – random1234

답변

2

해결했습니다! Heres는 나를 위해 일한 무엇을 :

let storage = Storage.storage() 
let url = food[indexPath.row].downloadURL 
let storageRef = storage.reference(forURL: url) 

//Removes image from storage 
storageRef.delete { error in 
    if let error = error { 
     print(error) 
    } else { 
     // File deleted successfully 
    } 
} 
1

이미지 위치를 기반으로 참조를 만듭니다.

// Create a reference to the file to delete 
let imageRef = storageRef.child("image.png") 

// Delete the file 
imageRef.delete { error in 
    if let error = error { 
    // Uh-oh, an error occurred! 
    } else { 
    // File deleted successfully 
    } 
} 

라인

food.remove(at: indexPath.row)

Storing/Downloading/Deleting images or videos Using Firebase Cloud Storage 수행하기 전에 위의 코드를 추가!

+0

안녕하세요 제 질문의 하단에있는 편집을보세요 – random1234

+0

신경 쓰지 마세요! 그러나 내 다른 질문을 체크 아웃하십시오! https://stackoverflow.com/q/46549312/7109256 – random1234

관련 문제