这可能是非常基本的,但我做了很多谷歌搜索,似乎无法弄清楚出了什么问题。我正在尝试将图像从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
我觉得这可能非常基本,但我找不到答案。
答案 0 :(得分:2)
如果您提供该选择器(可选),则必须实现具有该名称的方法:
+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
}
由于您尝试在类方法而不是实例方法中执行此操作,因此这很复杂。
除非你真的需要处理这种情况,否则你可以传递nil
而不是选择器。
答案 1 :(得分:1)
由于+moveToCameraRoll:
是一个类(即静态)方法,self
函数中的UIImageWriteToSavedPhotosAlbum
引用指向MyTest
类。您尝试使用的选择器是一个实例方法,因此只有MyTest
的实例,而不是MyTest
类本身的实例才会响应该选择器。
要解决此问题,请将image:didFinishSavingWithError:contextInfo:
方法更改为类方法。