banchichen / TZImagePickerController

一个支持多选、选原图和视频的图片选择器,同时有预览、裁剪功能,支持iOS6+。 A clone of UIImagePickerController, support picking multiple photos、original photo、video, also allow preview photo and video, support iOS6+
MIT License
8.05k stars 1.86k forks source link

受限的权限访问相册,在TZImagePickerController选择某个图片,然后到手机设置中将其取消,TZImagePickerController右下角的按钮状态未更新。 #1656

Closed xnxy closed 9 months ago

xnxy commented 10 months ago

提bug前必看 请先回答下列三个问题,否则不允处理,谢谢配合。 1、我最新的Demo是否有这个bug? 答:是的

2、你用的是什么版本?升级到最新版后是否正常? 答:最新版本3.8.3

3、是否有改动过我库内部的代码? 答:无

我如何复现这个bug? 1、受限的权限访问相册, 2、在TZImagePickerController选择某个图片; 3、然后到手机设置中将其取消; 4、会到AppTZImagePickerController右下角的按钮状态未更新,仍可以点击。

image

xnxy commented 10 months ago

目前在 checkSelectedModels方法中判断图片是否在列表中,如果不在进行移除。

- (void)checkSelectedModels {
    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
    NSArray *selectedModels = tzImagePickerVc.selectedModels;
    NSMutableSet *selectedAssets = [NSMutableSet setWithCapacity:selectedModels.count];
    for (TZAssetModel *model in selectedModels) {
        [selectedAssets addObject:model.asset];
    }

    for (TZAssetModel *model in _models) {
        model.isSelected = NO;
        if ([selectedAssets containsObject:model.asset]) {
            model.isSelected = YES;
        }
    }

    // fix: 受限的权限访问 更改选中的图片
    NSMutableArray *removeArray = [NSMutableArray array];
    for (TZAssetModel *model in selectedModels) {
        __block BOOL isHave = NO;
        [_models enumerateObjectsUsingBlock:^(TZAssetModel *obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if([model.asset.localIdentifier isEqualToString:obj.asset.localIdentifier]){
                isHave = YES;
                *stop = YES;
            }
        }];
        if(!isHave){
            [removeArray addObject:model];
        }
    }
    for (TZAssetModel *model in removeArray) {
        [tzImagePickerVc removeSelectedModel:model];
    }
}

同时又加了个updateBottomToolBar方法,来更新下方完成按钮的状态

- (void)initSubviews {
    dispatch_async(dispatch_get_main_queue(), ^{
        TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
        [tzImagePickerVc hideProgressHUD];

        [self checkSelectedModels];
        [self configCollectionView];
        self->_collectionView.hidden = YES;
        [self configBottomToolBar];
        [self updateBottomToolBar]; //fix: 受限的权限访问 更改选中的图片
        [self prepareScrollCollectionViewToBottom];
    });
}

//fix 受限的权限访问 更改选中的图片
- (void)updateBottomToolBar {
    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
    if (!tzImagePickerVc.showSelectBtn) return;
    _doneButton.enabled = tzImagePickerVc.selectedModels.count || tzImagePickerVc.alwaysEnableDoneBtn;
    _numberImageView.hidden = tzImagePickerVc.selectedModels.count <= 0;
    _numberLabel.text = [NSString stringWithFormat:@"%zd",tzImagePickerVc.selectedModels.count];
    _numberLabel.hidden = tzImagePickerVc.selectedModels.count <= 0;
}
xnxy commented 10 months ago

https://github.com/banchichen/TZImagePickerController/pull/1657

已提交了PR,大佬有时间看下是否有问题。

banchichen commented 9 months ago

已合并,发布了新版本3.8.4

banchichen commented 1 month ago

更新:这个导致了序号错乱的问题:https://github.com/banchichen/TZImagePickerController/issues/1671

序号错乱问题已经修复,该issue里状态更新问题,使用了新方案实现:https://github.com/banchichen/TZImagePickerController/commit/2a4caa806c4f9356df1bdc8233b42350bb41c652#diff-e0526319e03bba22c65b63d870193b138512ff0ac9047d894e1602ad957e4f47R1136

已发布了新版本3.8.7