保存多张图片到相册缺失图片

最近在做保存多张图片到相册,以前的项目只是单张保存。使用多张以后会出图片缺失的情况。排查一下原因是保存相册的时候,我们循环保存,相册显示繁忙,所以个别几张图片没有保存过去。为了解决这个问题,我们可以使用递归去实现。就是成功一张再保存下一张。

-(void)saveBtn
{
       [SSGOTools againRequestPhotoWithblock:^(BOOL isAgree) {
                
                if (isAgree) {
                    //确认开启权限
                   self.listOfImages = [NSMutableArray new];
                   int photoNum ;
                    photoNum = (int)_photoArray.count;
                    if (_photoArray.count > 9) {
                        photoNum = 9;
                   }
                    for (int i = 0; i < photoNum; i++) {
                       NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:_photoArray[i]]];
                       UIImage *myImage = [UIImage imageWithData:data];
                        [self.listOfImages addObject:myImage];
                        }
                   //递归保存图片,确保不丢图片
                   [self saveNext];}
-(void) saveNext{
    if (self.listOfImages.count > 0) {
        UIImage *image = [self.listOfImages objectAtIndex:0];
        UIImageWriteToSavedPhotosAlbum(image, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), nil);
    }
    else {
       NSLog(@"没有图片了");
    }
}

-(void) savedPhotoImage:(UIImage*)image didFinishSavingWithError: (NSError *)error contextInfo: (void *)contextInfo {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
    else {
        [self.listOfImages removeObjectAtIndex:0];
        [SSGOTools showInfoPopHint:@"保存成功"];
    }
    [self saveNext];
}

可以试一下,不会再出现丢图片的问题。但是新的问题来了。

首先9张图片以上的时候 非常慢。用户不知道你在干嘛。大部分用户都不会耐心等待。会选择再点击一次

第二个问题就是如果第一次写入相册没有完成还在递归函数中,第二次又要开始,但是相册不可能同时处理两张图片。会造成相册繁忙。那么就会造成递归函数的崩溃。程序也就崩溃了。所以想要更好解决。我们还要考虑多线程的方法去实现

参考下面博客,多线程保存图片到相册

https://blog.csdn.net/lee727n/article/details/80775190

猜你喜欢

转载自blog.csdn.net/lee727n/article/details/80775037
今日推荐