Objective-C 카테고리로 인해 인식 할 수없는 선택기가 발생 함
내 프로젝트에는 UIImage
다른 클래스에서 호출하려는 범주 함수가 있습니다. 이미지 범주에 대한 헤더 파일을 제대로 가져 오면 경고없이 프로젝트가 실행됩니다.
문제는 UIImage
카테고리 함수를 호출 할 때 인식 할 수없는 선택기 오류가 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"]];
예외 발생 :
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
몇 가지 가능성 :
UIImage+TTShare.m
오리 지에 링크하지 않을 수 없습니다 . 이를 통해 구현을 구현할 수 있습니다.- 이 정적 라이브러리의 일부인 경우,은 추가 할 당신 필요가
-all_load
받는 다른 링커 플래그 라이브러리에 연결하는 응용 프로그램의 설정을 구축 할 수 있습니다.
Category 메서드를 사용하려면 APP의 Other Linker Flags 빌드 설정에 -ObjC를 추가해야합니다.
나는 같은 문제가 있었고이 수정 사항도 적용해야했다. 내 NSDate-Extensions.m 소스 파일이 컴파일되지 않았기 때문에 프로젝트 설정으로 이동하여 적절한 대상을 선택한 다음 "Build Phases"탭을 클릭 한 다음 "Compile Sources"항목을 확장 한 다음 + 기호를 클릭해야했습니다. 내 NSDate-Extensions.m 파일을 수동으로 추가하십시오.
이 오류 메시지가 있었고 Cocoapods를 사용하고 있습니다. 오류를 수정하기 위해 필요한 pod install
모든 링크를 올바르게 생성하기 위해 다시 전화를 걸어야했습니다.
또 다른 가능성.
카테고리를 구현했지만 인터페이스가 없습니다. 나는 당신이 카테고리의 인터페이스를 * .h에서 선언하는 것을 잊었다는 것을 의미합니다.
또 다른 가능성 :
인정하기에는 너무 부끄럽지만 누군가가 똑같은 어리석은 실수를했을 수도 있습니다.
한 프로젝트에서 다른 프로젝트로 코드를 복사하고 실수로 .h
파일과 파일 에 동일한 소스 코드를 붙여 넣었습니다 .m
(둘 다 .h
파일 용 코드를 넣었습니다 ). 내 .m
파일을 수정 했고 작동했습니다.
인터페이스 imageNamed
대신 쓰기 때문일 수 imageNamedDR
있습니다 ..
참고 URL : https://stackoverflow.com/questions/3998483/objective-c-category-causing-unrecognized-selector
'ProgramingTip' 카테고리의 다른 글
FilteredArrayUsingPredicate가 배열에 존재하지 않습니다. (0) | 2020.11.09 |
---|---|
Python2.7의 unittest에서 assertRaises ()에 의해 생성 된 오류 메시지를 표시하는 방법은 무엇입니까? (0) | 2020.11.09 |
Swift에서 shouldChangeCharactersInRange가 어떻게 작동합니까? (0) | 2020.11.09 |
둘 다 null 일 수있는 값을 비교하는 방법은 T-SQL입니다. (0) | 2020.11.09 |
변수가 상수라고하는 것을 이미 알고 있는데 왜 const 키워드를 사용합니까? (0) | 2020.11.09 |