编程技术网

关注微信公众号,定时推送前沿、专业、深度的编程技术资料。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

极客时间

Objective-C 类别导致无法识别的选择器:Objective-C Category Causing unrecognized selector

marco110 图像识别 2022-5-6 21:19 11人围观

腾讯云服务器
Objective-C 类别导致无法识别的选择器的处理方法

我的项目有一个 UIImage 类别函数,我想从另一个类调用它.我正确导入了图像类别的头文件,并且我在没有警告的情况下编译了项目.

My project has a UIImage category function that I want to call from another class. I properly import the header file for the image category and I get the project to compile with no warning.

问题是,当我调用 UIImage 类别函数时,我看到了一个无法识别的选择器错误,带有 NSInvalidArgumentException.如果我已正确链接所有内容,为什么我会看到这个?

The problem is that when I call the UIImage category function I seen an unrecognized selector error with a NSInvalidArgumentException. Why am I seeing this if I've properly linked everything?

#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"]]; 

异常:

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 添加到 Other Linker Flags 构建设置,以便应用链接到库.
  1. You did not link UIImage+TTShare.m into your target. So while you have the header, you're not compiling the implementation.
  2. If this is part of a static library, you need to add -all_load to the Other Linker Flags build setting for the app linking against the library.

这篇关于Objective-C 类别导致无法识别的选择器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程技术网(www.editcode.net)!

腾讯云服务器 阿里云服务器
关注微信
^