我遇到的问题是协议委托不总是响应。这是我的实施:
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中不使用委托的其他按钮仍能正常工作。
有什么想法吗?
答案 0 :(得分:3)
调试提示。尝试暂时从weak
媒体资源中删除delegate
限定符。您可能会过早地释放您的委托对象(即,strong references 为零)。
如果这可以解决您的问题,那么您就找到了自己的错误,恭喜!请再次插入weak
限定符,以免不必要地泄漏内存 - 并记住在其他地方保留强大的引用: - )
答案 1 :(得分:0)
我认为你必须在推动相机的地方指定其他视图控制器delegate = self
答案 2 :(得分:0)
检查初始化摄像机视图时是否设置了delegate
。尝试类似:
let cameraView = CameraView()
cameraView.delegate = self