У меня есть следующая imagePickerController
функция делегата, каждый раз, когда я выбираю изображение, оно заменяет предыдущее urlString
загруженного изображения на Firebase Storage
вместо , вставляя со второго до последнего массива.count - 1 позиция (по замыслу, поскольку я использую последнюю запись для удаления из очереди другого cell
в collectionview
) массива images
.В результате последнее изображение urlString всегда заменяется самым последним.
Я должен добавить , если я загружаю одно изображение за раз, удаляясь от текущего VC, затем возвращаясь и загружая другоеизображение снова, затем оно работает как положено.
Результат операторов печати в коде выглядит следующим образом:
Загрузить изображение 1:
0. ADDING images.count: 3
1. ADDING images.count: 4
2. ADDING images.count: 4
images.last item: Optional("dummy string")
Загрузить изображение 2 ( количество изображений не увеличилось ):
0. ADDING images.count: 4
1. ADDING images.count: 4
2. ADDING images.count: 4
images.last item: Optional("dummy string")
Функция:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
self.dismiss(animated: true, completion: nil)
Utilities.run.showSVHUD(uiView: self.view, status: "Saving")
var selectedImageFromPicker: UIImage?
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
selectedImageFromPicker = editedImage
} else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
selectedImageFromPicker = originalImage
}
if let selectedImage = selectedImageFromPicker {
guard let uid = Auth.auth().currentUser?.uid else { return }
print("0. ADDING images.count: \(self.images.count)")
DataService.run.uploadProfileImageToFirebaseStorage(image: selectedImage) { (success, urlString) in
self.images.insert(urlString, at: self.images.count - 1)
print("1. ADDING images.count: \(self.images.count)")
let slice = self.images.dropLast()
let urlArray = Array(slice) //Converting Slice to Array
let dictionary = urlArray.indexedDictionary //converting to Dictionary
DataService.run.updateProfileImagesValueForUser(uid: uid, imagesUrls: dictionary, handler: { (success) in
if success {
Utilities.run.dismissSVHUD(delay: 0.5)
print("2. ADDING images.count: \(self.images.count)")
print("images.last item: \(String(describing: self.images.last))")
self.collectionView.reloadData()
self.collectionView.layoutIfNeeded()
}//end if success
})// end updateProfileImagesValueForUser
}//end uploadProfileImageToFirebaseStorage
}//end if let selectedImage = selectedImageFromPicker
}//end func
images
массив инициируется из переданного объекта User
, который содержит массивString
объектов.
func initData(forUser user:User) {
self.user = user
}//end func
setupviews()
вызывается в viewWillAppear()
, который инициализирует images
массив
func setupViews(){
images = user!.profileImages
images.append("dummy string")
let imageString = user!.profilePictureURL
let url = URL(string: imageString)//create URL from string
profileImg.sd_setImage(with: url, placeholderImage: #imageLiteral(resourceName: "placeholder"), options: [.continueInBackground])
}//end func