我正在开发一个有关餐厅的应用程序。 但 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
中,然后添加 name
和 phone
您需要做的是在闭包内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/