3

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
4

2 回答 2

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];
    }
于 2010-07-07T01:54:41.633 回答
0

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

编辑:

它返回的时间之一...... wait_fences:未能收到回复:10004003

这意味着操作超时。造成这种情况的原因有很多:

  1. 内存不足:登录didReceiveMemoryWarning看看是不是这个原因。
  2. 系统无法保存的损坏文件。如果每次都生成图像,则可能不会每次都正确显示。
  3. 不正确地报告磁盘已满错误。

我认为(1)最有可能并解释了间歇性。当您有足够的内存时,该方法有效,而当您没有内存时,该方法将失败。

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

于 2010-06-10T20:12:26.707 回答