我目前正在使用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 bug,有人已经记录了它(http://openradar.appspot.com/18762927),但我想尝试一下他们正在使用的解决方法。但是我无法进入" CAMZoomSlider"通过UIImagePicker的实例。
有谁知道如何到达CAMZoomSlider?
答案 0 :(得分:2)
我能够通过在子类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];
}
}
}