访问CAMZoomSlider实例以清除它的委托

时间:2014-12-23 21:30:42

标签: ios ios8 uiimagepickercontroller

我目前正在使用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?

1 个答案:

答案 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];
        }
    }
}