Я почти уверен, что ошибка лежит в заданной строке. Я думал, что .key должен был сделать запись динамической c, но вместо этого дочерний фотопост перезаписывается каждый раз. Что мне нужно изменить, чтобы каждая загрузка сохранялась и перезаписывалась.
class post{
var imageDownloadURL: String?
var image: UIImage!
var caption: String!
init(image: UIImage, caption: String) {
self.image = image
self.caption = caption
}
func save() {
let uid = Auth.auth().currentUser!.uid
let newPostRef = Database.database().reference().child("people").child(uid).child("PhotoPosts")
let newPostRef1 = Database.database().reference().child("people").child(uid).child("PhotoPosts1")
let newPostKey = newPostRef.key
if let imageData = image.jpegData(compressionQuality: 0.6){
let imageStorageRef = Storage.storage().reference().child("images")
let newImageRef = imageStorageRef.child(newPostKey)
let newImageRef1 = imageStorageRef.child(newPostKey)
newImageRef.putData(imageData).observe(.success, handler: {(snapshot) in
self.imageDownloadURL =
snapshot.metadata?.downloadURL()?.absoluteString
newPostRef.setValue(self.imageDownloadURL as Any)
})
newImageRef1.putData(imageData).observe(.success, handler: {(snapshot) in
self.imageDownloadURL = snapshot.metadata?.downloadURL()?.absoluteString
let keyToPost = Database.database().reference().child("people").child(uid).childByAutoId().key
let f1: [String: Any] = [(keyToPost) : self.imageDownloadURL as Any]
newPostRef1.updateChildValues(f1)
})
}
}
}
Вот правила базы данных:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Примечание. Я знаю, что newimageref1 ссылается на то же самое, что и newimageref, но я не понимаю, как это может логически вызвать перезапись. Я почти уверен, что это не то, что вызывает перезапись.
Обновление после правильного ответа:
Загрузка изображения.
public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ViewControllerTableViewCell
let immy = cell.viewWithTag(1) as! UIImageView
let person: Userx = people[indexPath.row]
cell.postID = self.people[indexPath.row].postID
if let PhotoPosts = person.PhotoPosts {
let url = URL(string: PhotoPosts)
immy.sd_setImage(with: url)
}
return cell
........
for people in snapshot.children.allObjects as! [DataSnapshot] {
if people.key != thisUsersUid {
print("peoplekey",people.key)
let peoplePhotoPosts = peopleObject?["PhotoPosts"] as? String
let peopl = Userx(PhotoPosts: peoplePhotoPosts, imageDownloadURL: peopleimageDownloadURL, postID: peoplepostID, ...)
self.people.append(peopl)
self.people.append(peopl)