UIImageWriteToSavedPhotosAlbum工作......有时候

时间:2010-06-10 19:19:00

标签: cocoa-touch uiimagepickercontroller iphone-sdk-3.1

UIImageWriteToSavedPhotosAlbum有时只能工作。有时它起作用,有时它不起作用,完全相同的功能。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
NSLog(@"Saving image to camera roll...");
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
NSLog(@"Done!"); }

我正在使用UIImagePicker控制器来获取然后调用该函数的图像。

有时会将其保存到相机胶卷上,有时则根本不会。

任何人都有任何想法?

提前致谢。

编辑:

UIImageWriteToSavedPhotosAlbum的完成方法有时返回错误:

wait_fences: failed to receive reply: 10004003

2 个答案:

答案 0 :(得分:17)

希望这个答案为时已晚,无法提供帮助。我遇到了完全相同的问题。事实证明这个问题是双重的。首先,在将图像发送到UIImageWriteToSavedPhotosAlbum之前,需要保留图像。其次,在iPhone4之前的设备上,这个功能可以花费很多时间来完成它的工作。我发现的修复是实现回调函数。有关此信息,请参阅UIImageWriteToSavedPhotosAlbum的文档。该函数必须采用正确的格式,不能只使用任何旧函数。在此功能中,请确保释放您保留的图像,否则将泄漏内存。您还可以使用它来跟踪保存图像的时间。以下是我的基本代码:

    -(void)processImage:(UIImage *)image {
        [image retain];
        UIImageWriteToSavedPhotosAlbum(reconstructedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
}


    - (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
        NSLog(@"SAVE IMAGE COMPLETE");
        if(error != nil) {
            NSLog(@"ERROR SAVING:%@",[error localizedDescription]);
        }
        [image autorelease];
    }

答案 1 :(得分:0)

首先,我将向完成目标方法添加一个完成目标方法,以查看它是否产生任何错误。有关详细信息,请参阅UIImageWriteToSavedPhotosAlbum文档。

编辑:

  

有一次它回来了......   wait_fences:未收到回复:   10004003

这意味着操作超时。原因很多:

  1. 内存不足:在didReceiveMemoryWarning中登录,看看是否是原因。
  2. 损坏系统无法保存的文件。如果每次可能无法正确显示图像,则会生成图像。
  3. 报告的磁盘已满错误报告不正确。
  4. 我认为(1)最有可能并解释间歇性。当你有足够的内存时,该方法可以工作,当你没有时,它就会失败。

    此外,编译时,请解决出现的任何警告。这些只是在运行时才会显示的错误。你的问题可能会列在那里