Имам проблем с делегат на протокол, който не винаги отговаря. Ето моята реализация:
protocol CameraViewDelegate: class {
func didTapCancel(sender: CameraView)
func didFinishSelectingPhoto(image: UIImage, sender: CameraView)
}
В класа CameraView имам:
weak var delegate: CameraViewDelegate?
и
@IBAction func cancelButtonTapped() {
delegate?.didTapCancel(self)
}
@IBAction func sendPhotoTapped() {
if let image = selectedImage {
delegate?.didFinishSelectingPhoto(image, sender: self)
}
}
В другия клас имам:
class PhotoController: CameraViewDelegate {
и
func didTapCancel(sender: CameraView) {
dismissViewControllerAnimated(true, completion: nil)
RootViewController.shared().navigateToHome()
}
func didFinishSelectingPhoto(image: UIImage, sender: CameraView) {
let photo = MyPhoto(image: image)
sendPhoto(photo)
dismissViewControllerAnimated(true, completion: nil)
}
Това работи 95% от времето, но получавам странен бъг, при който делегатът не успява да отговори понякога. Ако натисна бутона за отмяна или изпращане на снимка, бутонът изглежда натиснат, но нищо не се случва. Знам, че това е делегатът, който не отговаря, защото другите бутони в CameraView, които не използват делегата, все още работят нормално.
Някакви идеи?
delegate
на вашияCameraView
клас в друг клас? - person nayem   schedule 05.04.2017nil
някъде и докато изпълнявате/изпращате съобщения към него. Вероятно не откривате къде, защото сте безопасно разопаковане. Като някъде като свързания по-горе отговор освобождаватеself
по-рано или освобождавате обект по-рано. Може да ви помогне да опитате принудително разопаковане, така че да сринете в обектаnil
и да го определите. След като го намерите, редактирайте въпроса си с възможния нулев обект - person Honey   schedule 06.04.2017