У меня проблема с делегатом протокола, который не всегда отвечает. Вот моя реализация:
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