【问题标题】:UIImageWriteToSavedPhotosAlbum working... sometimesUIImageWriteToSavedPhotosAlbum 工作...有时
【发布时间】:2010-06-10 19:18:59
【问题描述】:

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

【问题讨论】:

  • 请详细一点,有错误信息吗?你确定图像不为零吗?该方法实际上被调用了吗?您还做过其他故障排除吗?
  • 是的,它肯定会被调用,因为它会记录这些 NSLog。不,图像不能为 nil,因为它有时会保存,有时它不会。
  • 问题解决了吗?我也有同样的...
  • 不,我没有。从来没有多看它。

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


【解决方案1】:

希望这个答案不会太晚而不会有所帮助。我遇到了完全相同的问题。事实证明,这个问题有两个方面。首先,图像在发送到 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];
    }

【讨论】:

  • 一点也不晚。实际上,我已经搁置了这个项目,因为我有另一个想法,并且刚刚将那个想法提交给了 AppStore。 :) 今天试试这个,谢谢。
【解决方案2】:

我会首先在 save 调用中添加一个完成目标方法,看看它是否产生任何错误。有关详细信息,请参阅UIImageWriteToSavedPhotosAlbum 文档。

编辑:

有一次它返回... wait_fences:未能收到回复: 10004003

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

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

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

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

【讨论】:

  • 它返回的时间之一...wait_fences:未能收到回复:10004003
  • 一位朋友在他的 3GS 上进行了测试,同样的事情发生了。我的应用程序根本不消耗内存,所以我认为这不应该是原因。无论如何,我都会尝试放置它,看看它是否会发出任何内存警告。 (不,没有任何编译警告。)
  • 不要假设内存使用情况。 测试一下。 Objective-C 的弱点之一是错误会造成大量内存泄漏。如果它不是内存,那么下一个最可能的问题是图像损坏。如果您直接从相机中拍摄,我不知道会发生什么。我会尝试保存测试图像而不是图像选择器返回的图像以尝试隔离问题。
  • 在一个应用程序运行时,我拍了 4 张照片,3 张正确保存,另一张没有,并触发内存警告。第二次运行...我拍了7张照片,2张正确保存,没有错误,没有内存警告。
  • 好吧,看来您可能有一些内存问题。我会看看是什么原因造成的,然后从那里开始工作。启动仪器,看看它说了什么。如果您所做的只是拍照然后立即保存,我认为问题不在于直接相关的图像本身。您可以尝试禁用应用程序的每个部分,但这个部分并查看您是否有问题。如果没有,请重新启用部件,直到遇到错误。
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
相关资源
最近更新 更多