У меня есть настройки для выбора изображения следующим образом:Как не выполнить запрос на viewDidAppear, как только изображение было выбрано JUST?
@IBOutlet weak var imageHolder: UIImageView!
@IBAction func addImage(_ sender: UIButton) {
let pickerController = UIImagePickerController()
pickerController.delegate = self
pickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary
pickerController.allowsEditing = true
self.present(pickerController, animated: true, completion: nil)
}
var imageSaved = UIImage()
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
self.dismiss(animated: true, completion: nil)
self.imageHolder.image = image
imageSaved = image
}
Выбор сборщика вызывает все фотографии на тренажере, то пользователь может выбрать их. После его выбора представление возвращается к исходному виду и отображает изображение в изображении. Однако он не сохраняется, пока в этом представлении не будет нажата кнопка «Сохранить». Все это прекрасно работает. Кнопка сохранения - это просто действие, которое сохраняет файл изображения в БД.
У меня есть viewDidAppear
, настроенный для запроса БД и отображения изображения, которое было сохранено, как только пользователь переместится в это представление ... это также хорошо работает. Однако, поскольку viewDidAppear выполняется несколько раз, возникает проблема, когда новое изображение сначала выбирается для замены старого. Кнопка «Сохранить» удаляет старый объект и заменяет его, поэтому после его замены все работает нормально. Однако после выбора изображения в подборщике (и до, нажимая «Сохранить» ... и поэтому до того, как этот файл находится в БД), вкратце отобразится вновь выбранное изображение, но viewDidAppear
снова запустится и отправит его обратно к изображению, находящемуся в настоящее время в БД. Это не технически ошибка, но она уродливая, и я бы хотел, чтобы она была исправлена, но я не знаю, как это сделать.
Это viewDidAppear
код также:
override func viewDidAppear(_ animated: Bool) {
let query = PFQuery(className: "ProfilePictures")
query.whereKey("user", equalTo: (PFUser.current()?.objectId!)! as String)
query.findObjectsInBackground { (objects, error) in
if let objectss = objects{
if objectss.count != 0{
for object in objectss{
let imagePulled = object["ProfilePicture"] as! PFFile
imagePulled.getDataInBackground(block: { (data, error) in
if let downloadedImage = UIImage(data: data!){
self.imageHolder.image = downloadedImage
} else{
print(error)
}
})
}
}
}
}
}
По существу, как я могу получить изображение, чтобы показывать только недавно выбранного изображения в этом пространстве между выбрав его и нажав сохранить?
Хорошо, что делает. Единственная причина, по которой я его использую в 'viewDidAppear', - это потому, что он быстрее загружается, чем в' viewDidLoad'. Это неправильный способ сделать это (если я просто исправлю свою конкретную проблему с 'dispatch_once', которую вы предложили?) –
Кроме того, при попытке использовать' dispatch_once_t' мне присваивается ошибка: dispatch_once_t недоступен в swift: используйте лениво вместо инициализированных глобалов " –
См. обновленный ответ. –