【问题标题】:Access to CAMZoomSlider instance to clear it's delegate访问 CAMZoomSlider 实例以清除它的委托
【发布时间】:2014-12-23 21:30:41
【问题描述】:

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

【问题讨论】:

    标签: ios ios8 uiimagepickercontroller


    【解决方案1】:

    通过在子类 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];
            }
        }
    }
    

    【讨论】:

    • HI Zackpep,我有点害怕使用这个代码,如果我使用这个代码,它会拒绝应用商店中的应用吗?
    • 我也对此感到担忧,但我的应用并未因此而被拒绝。
    • 仅供参考,私有类的名称在 iOS 9 中更改为 CMKZoomSlider,因此需要修改您的解决方案以检查两者。在此处查看类似的解决方案:stackoverflow.com/a/29959695/406797
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2021-06-01
    • 2022-08-15
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多