我目前正在使用UIImagePicker,并且应用程序在iOS 8上使用以下工作流程崩溃:
启动相机,对其进行缩放以显示下面的缩放滑块,然后拍照。选择使用照片和应用崩溃。
在深入研究崩溃后,“ didHideZoomSlider”消息发送到图像选择器视图的已释放实例。
这是我的代码:
imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeImage, nil];
imagePicker.allowsEditing = YES;
imagePicker.delegate = self;
[myController presentViewController:imagePicker animated:animated completion:nil];
我尝试了几件事。我的控制器对图像选择器有很强的引用,我尝试将其设为弱引用,但应用仍然崩溃。另外,我需要一个强有力的参考,因此我实际上不能使它变得脆弱。
尽管这看起来像是一个Apple错误,并且已经有人记录了该错误(http://openradar.appspot.com/18762927),但我还是想尝试一下他们正在使用的解决方法。但是,我无法通过UIImagePicker的实例访问“ CAMZoomSlider”。
有人知道如何前往CAMZoomSlider吗?
最佳答案
通过在子类UIImagePickerController类中执行以下操作,我能够清除CAZoomSlider委托。可以肯定的是,它似乎已解决了崩溃问题。
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self clearZoomSliderDelegate:self.view.subviews];
}
- (void)clearZoomSliderDelegate:(NSArray*)subviews
{
for (UIView *subview in subviews)
{
if ([subview isKindOfClass:NSClassFromString(@"CAMZoomSlider")])
{
if ([subview respondsToSelector:@selector(setDelegate:)]) {
[subview performSelector:@selector(setDelegate:) withObject:nil];
}
return;
}
else if (subview.subviews != nil) {
[self clearZoomSliderDelegate:subview.subviews];
}
}
}
关于ios - 访问CAMZoomSlider实例以清除其委托(delegate),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27628302/