Objective c 对象不响应选择器

Objective c 对象不响应选择器,objective-c,ios,Objective C,Ios,这可能是非常基本的,但我已经做了很多谷歌搜索,似乎无法找出什么是错的。我正在尝试将一张图像从iOS应用程序的沙盒数据文件夹移动到“相机卷” 如果我使用UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil),它不会抛出错误,但也不会在照片中保存图像副本 为了找出失败的原因,我尝试实现一个选择器(如下),但现在它抛出一个NSInvalidArgumentException,原因是“MyTest不响应选择器映像:didFinishSavingWithError:

这可能是非常基本的,但我已经做了很多谷歌搜索,似乎无法找出什么是错的。我正在尝试将一张图像从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

我觉得这可能是非常基本的,但我还没有找到答案。

如果您提供了该选择器(可选),那么您必须使用该名称实现一个方法:

+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
}
这很复杂,因为您试图在类方法而不是实例方法中执行此操作


除非您确实需要处理这种情况,否则可以传递
nil
而不是选择器。

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


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

问题是您将其实现为实例方法,但
self
是类,而不是实例。尝试将
image:didfishsavingwitheror:contextInfo:
方法设置为我展示的类方法。这是我不理解的。谢谢