儲存多張圖片到相簿缺失圖片
阿新 • • 發佈:2018-11-22
最近在做儲存多張圖片到相簿,以前的專案只是單張儲存。使用多張以後會出圖片缺失的情況。排查一下原因是儲存相簿的時候,我們迴圈儲存,相簿顯示繁忙,所以個別幾張圖片沒有儲存過去。為了解決這個問題,我們可以使用遞迴去實現。就是成功一張再儲存下一張。
-(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