Objective c 对象不响应选择器
这可能是非常基本的,但我已经做了很多谷歌搜索,似乎无法找出什么是错的。我正在尝试将一张图像从iOS应用程序的沙盒数据文件夹移动到“相机卷” 如果我使用Objective c 对象不响应选择器,objective-c,ios,Objective C,Ios,这可能是非常基本的,但我已经做了很多谷歌搜索,似乎无法找出什么是错的。我正在尝试将一张图像从iOS应用程序的沙盒数据文件夹移动到“相机卷” 如果我使用UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil),它不会抛出错误,但也不会在照片中保存图像副本 为了找出失败的原因,我尝试实现一个选择器(如下),但现在它抛出一个NSInvalidArgumentException,原因是“MyTest不响应选择器映像:didFinishSavingWithError:
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
我觉得这可能是非常基本的,但我还没有找到答案。如果您提供了该选择器(可选),那么您必须使用该名称实现一个方法:
+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
}
这很复杂,因为您试图在类方法而不是实例方法中执行此操作
除非您确实需要处理这种情况,否则可以传递
nil
而不是选择器。由于+moveToCameraRoll:
是一个类(即静态)方法,因此UIImageWriteToSavedPhotosAlbum
函数中的self
引用指向MyTest
类。您尝试使用的选择器是一个实例方法,因此只有MyTest
的实例,而不是MyTest
类本身会响应该选择器
要解决此问题,请将您的
image:didFinishSavingWithError:contextInfo:
方法更改为类方法。问题是您将其实现为实例方法,但self
是类,而不是实例。尝试将image:didfishsavingwitheror:contextInfo:
方法设置为我展示的类方法。这是我不理解的。谢谢