美文网首页
关于iOS 开发批量保存图片到相册时丢失图片的解决方法

关于iOS 开发批量保存图片到相册时丢失图片的解决方法

作者: Ink_lhe | 来源:发表于2016-08-15 13:55 被阅读0次

    在循环语句中批量保存图片到相册时会有丢失的情况,代码一般是这个样子

    for (int i = 0; i < n; i++) {

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

    }

    debug了一下,错误是

    write busy

    原因

    iOS 往系统相册写照片的时候是单线程,一张存完才会存下一张,可能是因为要经过这几个过程:压缩图片、生成缩略图、SQLite保存数据,低配置的机器(比如 iPhone4)有点慢,同时写入照片会有失败的情况

    解决方法

    知道原因后就好解决了,方法就是一张存成功再存下一张

    先保存成数组

    #pragma mark -下载

    - (void)downLoadButtonClick:(UIButton*)button

    {

         [self saveImage];

    }

    #pragma mark -点击下载按钮

    - (void)saveImage

    {

    for (int i = 0; i < n; i++) {

    UIImage *image = ...;

    [self.photosArray addObject:image];

    }

    [self saveNext];

    }

    //循环保存图片

    - (void)saveNext

    {

    if(self.photosArray.count>0) {

    UIImage*image = self.photosArray[0];

    UIImageWriteToSavedPhotosAlbum(image,self,@selector(savedPhotoImage:didFinishSavingWithError:contextInfo:),nil);

    }

    else

    {

    [self allDone:JYPhotoBrowserSaveImageSuccessText];

    }

    }

    -(void) savedPhotoImage:(UIImage*)image didFinishSavingWithError: (NSError*)error contextInfo: (void*)contextInfo {

    if(error) {

    NSLog(@"%@", error.localizedDescription);

    [self allDone:JYPhotoBrowserSaveImageFailText];

    }

    else{

    [self.photoKeyArrayremoveObjectAtIndex:0];

    }

    [selfsaveNext];

    }

    //提示是否保存图片成功或者失败

    - (void)allDone:(NSString*)prompt

    {

    UILabel*label = [[UILabelalloc]init];

    label.textColor=FRONT_VIEW_Color;

    label.backgroundColor= [UIColorcolorWithRed:0.1fgreen:0.1fblue:0.1falpha:0.90f];

    label.layer.cornerRadius=HNYFrom6(5);

    label.clipsToBounds=YES;

    label.bounds=CGRectMake(0,0,HNXFrom6(150),HNYFrom6(30));

    label.center=self.view.center;

    label.textAlignment=NSTextAlignmentCenter;

    label.font= [UIFontboldSystemFontOfSize:17];

    [[UIApplicationsharedApplication].keyWindowaddSubview:label];

    [[UIApplicationsharedApplication].keyWindowbringSubviewToFront:label];

    label.text= prompt;

    //[self.indicatorView removeFromSuperview];

    [label performSelector:@selector(removeFromSuperview)withObject:nilafterDelay:1.0];

    }

    相关文章

      网友评论

          本文标题:关于iOS 开发批量保存图片到相册时丢失图片的解决方法

          本文链接:https://www.haomeiwen.com/subject/vyjcsttx.html