Objective-C类别导致无法识别的select器

我的项目有一个UIImage类别的function,我想从另一个class级调用。 我正确地导入图像类别的头文件,我得到的项目编译没有任何警告。

问题是,当我调用UIImage类别函数,我看到一个无法识别的select器错误与NSInvalidArgumentException 。 为什么我看到这个,如果我已经正确地链接了一切?

 #import <UIKit/UIKit.h> @interface UIImage (DRShare) + (UIImage*) imageNamed:(NSString*)name; @end @implementation UIImage (DRShare) + (UIImage*) imageNamedDR:(NSString*)name{ CGFloat s = 1.0f; if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){ s = [[UIScreen mainScreen] scale]; } NSString *path = [NSString stringWithFormat:@"%@%@%@.png",kImagesPath,name,s > 1 ? @"@2x":@""]; return [UIImage imageWithContentsOfFile:DRBUNDLE(path)]; } @end 

调用它的文件:

  backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamedDR:@"Share Popup Background"]]; 

exception提出:

 2010-10-22 11:51:02.880 Stuff[11432:207] +[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938 2010-10-22 11:51:02.883 Stuff[11432:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938' *** Call stack at first throw: ( 0 CoreFoundation 0x02e65b99 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x02fb540e objc_exception_throw + 47 2 CoreFoundation 0x02e6776b +[NSObject(NSObject) doesNotRecognizeSelector:] + 187 3 CoreFoundation 0x02dd72b6 ___forwarding___ + 966 4 CoreFoundation 0x02dd6e72 _CF_forwarding_prep_0 + 50 5 TapTapShare 0x0001291c -[DRShareViewController backgroundView] + 127 6 TapTapShare 0x00012343 -[DRShareViewController loadView] + 639 7 UIKit 0x0044f54f -[UIViewController view] + 56 8 UIKit 0x0044d9f4 -[UIViewController contentScrollView] + 42 9 UIKit 0x0045d7e2 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48 10 UIKit 0x0045bea3 -[UINavigationController _layoutViewController:] + 43 11 UIKit 0x0045d12d -[UINavigationController _startTransition:fromViewController:toViewController:] + 524 12 UIKit 0x00457ccd -[UINavigationController _startDeferredTransitionIfNeeded] + 266 13 UIKit 0x00574b55 -[UILayoutContainerView layoutSubviews] + 226 14 QuartzCore 0x02616481 -[CALayer layoutSublayers] + 177 15 QuartzCore 0x026161b1 CALayerLayoutIfNeeded + 220 16 QuartzCore 0x026160bd -[CALayer layoutIfNeeded] + 111 

几个可能性:

  1. 您没有将UIImage+TTShare.m链接到您的目标。 所以,当你有头,你没有编译的实现。
  2. 如果这是静态库的一部分,则需要将-all_load添加到链接库的其他链接程序标志生成设置。

如果您想使用Category方法,则必须将-ObjC添加到APP的Other Linker Flags构build设置。

我有同样的问题,不得不应用此修复程序以及。 我的NSDate-Extensions.m源文件没有编译,所以我不得不进入项目设置,然后select适当的目标,然后点击“构build阶段”选项卡,然后展开“编译源”项目,然后单击+符号并手动添加我的NSDate-Extensions.m文件。

我有这个错误消息,我正在使用Cocoapods。 要解决这个错误,我只需要再次调用pod install来正确创build所有必要的链接。

另一种可能性

你有类的实现,但没有接口。 我的意思是你忘了在* .h中声明你的类别的界面。

还有一种可能性:

这几乎让人难以承认,但以防万一有人会犯同样的愚蠢错误:

我是从一个项目的代码复制到另一个,并错误地粘贴相同的源代码在.h文件和.m文件(我已经把代码的意思.h文件)。 我解决了我的.m文件,它的工作。

可能是因为你在界面上写imageNamed而不是imageNamedDR ..