ios - Firebase 数据库结构

标签 ios swift firebase firebase-realtime-database

我正在开发一个有关餐厅的应用程序。 但 Firebase 数据库结构存在一些问题。 我的代码的数据库结构是这样的:

restaurants {
             AutoID {
                      name: "nnnnn",
                      phone:"88888888" }
             AutoID {
                      name: "nnnnn",
                      phone:"88888888" }
             image {
                    AutoID: URL
                    AutoID: URL }
}

如何将结构更改为这样:

restaurants {
             AutoID {
                      name: "nnnnn",
                      phone:"88888888",
                      image: URL }
             AutoID {
                      name: "nnnnn",
                      phone:"88888888",
                      image: URL }

当前代码是:

@IBAction func saveButton(_ sender: Any)
{
    addRestaurant()
}

func addRestaurant()
{
    ref = FIRDatabase.database().reference().child("restaurants")

    let key = ref?.childByAutoId().key

    let name = addName.text

    let phone = addPhone.text

    ref?.child(key!).setValue(["name": name, "phone": phone])

}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    let image = info[UIImagePickerControllerOriginalImage] as? UIImage

    addImage.image = image

    var data = Data()
    data = UIImagePNGRepresentation(image!)!

    let uniqueName = NSUUID().uuidString
    let imageRef = FIRStorage.storage().reference().child("restaurantImage").child("\(uniqueName)")
    imageRef.put(data, metadata: nil).observe(.success){(snapshot) in
        let downloadURL = snapshot.metadata?.downloadURL()?.absoluteString
        let imageDBRef = FIRDatabase.database().reference().child("restaurants/image")
        let key = imageDBRef.childByAutoId().key
        imageDBRef.child(key).setValue(downloadURL)
    }
    self.dismiss(animated: true, completion: nil)
}

非常感谢!

最佳答案

正如您所说,您首先将图像存储在 FIRStorage 中,然后添加 namephone 您需要做的是在闭包内imageRef 您需要存储所存储图像 URL 的引用,因此在 Controller 中声明一个实例属性并将其设置在该闭包内,并且当时也不要在数据库中设置图像 url,之后使用保存按钮使用新创建的属性同时发布姓名、电话和网址。

var imageURL = ""

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    let image = info[UIImagePickerControllerOriginalImage] as? UIImage

    addImage.image = image

    var data = Data()
    data = UIImagePNGRepresentation(image!)!

    let uniqueName = NSUUID().uuidString
    let imageRef = FIRStorage.storage().reference().child("restaurantImage").child("\(uniqueName)")
    imageRef.put(data, metadata: nil).observe(.success){(snapshot) in
        self.imageURL = snapshot.metadata?.downloadURL()?.absoluteString
        //Remove other code        
    }
    self.dismiss(animated: true, completion: nil)
}

现在,使用您的 addRestaurant 添加 image 的键,并使用 imageURL 设置其值

func addRestaurant()
{
    ref = FIRDatabase.database().reference().child("restaurants")        
    let key = ref?.childByAutoId().key        
    let name = addName.text        
    let phone = addPhone.text        
    ref?.child(key!).setValue(["name": name, "phone": phone, "image": imageURL])

}

关于ios - Firebase 数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327131/

相关文章:

ios - 从多个 CGRect 获取 maxX 和 minX,maxY 和 minY

Swift4 - 如何将 map 的区域设置为某个位置

ios - 如何在 AudioKit 中渲染和导出音频?

android - 与 Firebase 中的 SHA-1 混淆

typescript - Cloud Functions Firestore : @types/googlemaps 中的 Firebase-Admin 包 Typescript 错误

swift - Firestore 中是否有相当于 `beginsWith` 的内容?

ios - UILabel 自动换行+多行

java - 如何在构建期间修改 Java/Swift 源代码

iphone - MKAnnotation 的自定义标注 View ?

swift - 如何解决 Swift 编译器错误 "error: Bus error: 10"?