1. 程式人生 > >儲存多張圖片到相簿缺失圖片

儲存多張圖片到相簿缺失圖片

最近在做儲存多張圖片到相簿,以前的專案只是單張儲存。使用多張以後會出圖片缺失的情況。排查一下原因是儲存相簿的時候,我們迴圈儲存,相簿顯示繁忙,所以個別幾張圖片沒有儲存過去。為了解決這個問題,我們可以使用遞迴去實現。就是成功一張再儲存下一張。

-(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