Objective-C 범주 이상한 행동을 가져오기
-
11-09-2019 - |
문제
나는 확장 클래스에서는 외부 라이브러리입니다.여기에는 나의 코드:
헤더 파일:Manager+MyCategory.h
#import "Manager.h"
#import "Element.h"
@interface Manager (myCategory)
- (Element*) elementWithTag:(NSInteger)tag;
@end
구현 file:Manager+MyCategory.서 파일
@implementation Manager (myCategory)
- (Element*) elementWithTag:(NSInteger)tag {
...
}
@end
이제 여기에 사용하는 방법 이 카테고리:
#import "Manager+MyCategory.h"
@implementation myClass
- (void) myFunction:(NSInteger)tag {
Manager* myManager = [[Manager alloc] init];
Element* = [myManager elementWithTag:tag];
...
[myManager release];
}
@end
때 나는 컴파일이 없는 경고하지만 실행할 때 내 프로그램을 다음과 같은 오류가:
*** -[Manager elementWithTag:]: unrecognized selector sent to instance 0x105d9a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[Manager elementWithTag:]:
헤더 파일을(즉,Manager+MyCategory.h)은 제대로 가져온 그와 같이 링크를 구현하는 파일은 할 수 없습니다.면을 대체#import"Manager+MyCategory**.h**"여#가져오는"Manager+MyCategory**.m**에서"내준 그것이 제대로 작동됩니다.
누구나 설명할 수 있는 나에게 무엇을 잊었?감사
해결책
카테고리는 전통적인 유닉스와 잘 어울리지 않습니다 공전 도서관.
이 경우 -objc 옵션을 링커에 전달하면 문제가 해결되는 것 같습니다.
Apple Technical Q & A QA1490 모든 것을 설명합니다.
다른 팁
Xcode의 ApprorPriate Target에 Manager+MyCategory.m을 추가하는 것을 잊어 버린 것으로 생각됩니다. 모든 기호가 존재하고 적절한 헤더 파일이 포함되어 있기 때문에 모든 기호가 존재하고 컴파일러 경고가 없으므로 링커 오류가 발생하지 않지만 런타임에 elementWithTag:
메소드가 누락되었습니다.
사과,추가할 수 없습니다 이 주석으로...
그냥에 대한 테스트를 추가할 수 있습 extern c 에 선언된 함수를 머리에 구현된다.m 파일입니다.를 호출하는 경우 이러 c 함수 내에서 테스트 코드는 다음이 이 생 링커에 오류로 인해 해결되지 않은 식별자입니다.
이에 쉽게 만들 수 있습니다 문제를 조사를 제공하므로 즉각적인 피드백을 생성할 수 있는 몇 가지 추가 단서를 이 파일에 포함되지 않.
주어진 시간에 프레임,내가 가정을 이것을 했지만,경우에는...어 있는지 확인하는 청소,대상을 종료 엑스 코드,그리고 다시 열려 있습니다.나는 프로젝트 파일이 손상되는 메모리에와 이상한 행동을.
바
Xcode 4로 업그레이드 할 때이 문제가있었습니다.
수정하기 위해 카테고리 정의를 별도의 .m 및 .h -xcode 3으로 분리해야했습니다.