在循环语句中批量保存图片到相册时,会有部分图片丢失,代码一般是这样的:
<code>
for(UIImage *image in imageArray)
{
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
</code>
由于iOS 往系统相册写照片的时候是单线程,一张存完才会存下一张,可能是因为要经过这几个过程:压缩图片、生成缩略图、SQLite保存数据,同时写入照片会有失败的情况。
解决方法是:
//保存小图至相册
<code>
-(void)saveSmallImages
{
self.index=0;
UIImage *image=self.imageArray[self.index];
UIImageWriteToSavedPhotosAlbum(image,self,@selector(image:didFinishSavingWithError:contextInfo:),nil);
}
</code>
//递归调用保存图片
<code>
-(void)image: (UIImage *) image
didFinishSavingWithError: (NSError *) error
contextInfo: (void *) contextInfo;
{
[self saveNext];
}
</code>
//保存下一张
<code>
-(void) saveNext
{
self.index++;
if (self.index<self.imageArray.count)
{
UIImage *image=self.listToSave[self.index];
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
}
</code>
需要注意的是:
在保存完成的时候,调用的方法必须是:
<pre><code>-(void)image: (UIImage *) image
didFinishSavingWithError: (NSError *) error
contextInfo: (void *) contextInfo;</code></pre>
不然就会导致崩溃。
网友评论