3

这可能是非常基本的,但我已经做了很多谷歌搜索,似乎无法弄清楚出了什么问题。我正在尝试将图像从 iOS 应用程序的沙盒数据文件夹移动到“相机胶卷”。

如果我使用UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil),它不会引发错误,但也不会在照片中保存图像的副本。

为了弄清楚它失败的原因,我尝试实现一个选择器(如下),但现在它抛出一个 NSInvalidArgumentException,原因是“MyTest<...> 不响应选择器图像:didFinishSavingWithError:contextInfo:”

这是我的实现:

@implementation MyTest

- (void)
    image:(UIImage *) image
    didFinishSavingWithError: (NSError *) error
    contextInfo: (void *) contextInfo
{
    //log error or do stuff...
}

+ (void) moveToCameraRoll: (NSString *) path
{
    UIImage *img = [[UIImage imageNamed:path] retain];

    UIImageWriteToSavedPhotosAlbum(img,
                                   self,
                                   @selector(image:didFinishSavingWithError:contextInfo:),
                                   nil);
}

@end

我觉得这可能是非常基本的,但我一直无法找到答案。

4

2 回答 2

2

如果您提供该选择器(这是可选的),那么您必须实现一个具有该名称的方法:

+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
}

由于您试图在类方法而不是实例方法中执行此操作,因此这很复杂。

除非你真的需要处理这种情况,你可以通过nil而不是选择器。

于 2012-11-01T22:46:25.630 回答
2

由于+moveToCameraRoll:是类(即静态)方法,因此函数中的self引用UIImageWriteToSavedPhotosAlbum指向MyTest该类。您尝试使用的选择器是一个实例方法,因此只有 的实例MyTest而不是MyTest类本身会响应该选择器。

要解决此问题,请将您的image:didFinishSavingWithError:contextInfo:方法更改为类方法。

于 2012-11-01T22:47:31.277 回答