对象不响应选择器

时间:2012-11-01 22:43:10

标签: objective-c ios

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

我觉得这可能非常基本,但我找不到答案。

2 个答案:

答案 0 :(得分:2)

如果您提供该选择器(可选),则必须实现具有该名称的方法:

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

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

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

答案 1 :(得分:1)

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

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