在循環語句中批量保存圖片到相冊時會有丟失的情況,代碼一般是這個樣子
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];
}