将图像保存到照片库,但有时无法正常工作

时间:2011-01-02 11:04:45

标签: iphone

我使用下面的代码将照片保存到照片库中

 for(int i=0;i<[imageNameArray count];i++)
{


    NSMutableString *sss=[[NSMutableString  alloc] initWithString: myAppPath];
    [sss appendString:@"/"] ;
    [sss appendString: [NSString stringWithFormat:@"%@",[imageNameArray objectAtIndex:i]  ] ] ;
    UIImage *image = [[[UIImage alloc] initWithContentsOfFile:sss]autorelease];
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    [sss release];

}

但有时,它无法正确保存图像,我发现在照片库中,有一个或多个黑色块在缩略图模式下替换保存的图像,但如果单击黑色块,原始图像可以正确显示。

有没有人遇到同样的问题?

欢迎任何评论

由于

InterDev中

1 个答案:

答案 0 :(得分:1)

您可能会快速连续保存图像,因此保存调用会重叠。 (将图像写入磁盘所需的时间比从函数返回的图像要长。)

据我所知,保存图像功能是异步的,并允许注册委托/回叫(在你传递的地方为零)。

你应该等到一张图像完成写入,直到你开始另一张图像。

您可以使用委托和回调对此进行设计。为了让用户更好并让他们知道发生了什么,您可以显示进度条和其他信息,如“保存的1/3图像”等。

编辑:

为了更好的背景,我查阅了文档:

UIImageWriteToSavedPhotosAlbum函数声明为:

void UIImageWriteToSavedPhotosAlbum (
   UIImage  *image,
   id       completionTarget,
   SEL      completionSelector,
   void     *contextInfo
);

您应该设置completionTarget(可能是self)和completionSelector应该具有以下签名:

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

在完成选择器中,您可以执行是否需要执行其他保存的逻辑,并更新“进度”用户界面。