나는 내 애플 리케이션에서 자주 사용하는 유용한 클래스/메소드를 포함하는 자체 프레임 워크를 개발했습니다. 최근에 NSString "NSString + Extensions.h/m"에 대한 클래스 확장을 추가하여 내 자신의 메서드를 추가했습니다. 예 :클래스 확장 및 프레임 워크
- 는 NSString + Extensions.h
@interface NSString (Extensions) - (NSString *)removeDiacritics; @end
- 는 NSString + Extensions.m
,#import "NSString+Extensions.h" @implementation NSString (Extensions) - (NSString *)removeDiacritics { return [[[NSString alloc] initWithData:[self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding] autorelease]; } @end
프레임 워크를 성공적으로 컴파일합니다. 그러나 나는 모든 응용 프로그램이 클래스 확장의 기능 중 하나를 사용하려고하면
내가 얻을 ...- AppDelegate.m
// CUtils is the name of the framework. CUtils.h contains #import of all header files // contained in my framework #import <CUtils/CUtils.h> @implementation AppDelegate ... - (void)applicationDidBecomeActive:(UIApplication *)application { /* Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previouslyin the background, optionally refresh the user interface. */ NSString *toto = @"Je suis une chaîne avec des caractères spéciaux"; NSLog(@"%@", toto); NSLog(@"%@", [toto removeDiacritics]); }
다음 오류 :
2012-01-31 17 : 01 : 09.921 TestCUtils [4782 : 207] Je SUIS UNE 셰네 AVEC DES caractères SPECIAUX 2012-01-31 17 : 01 : 09.924 TestCUtils [4782 : 207] - [__ NSCFConstantString removeDiacritics] : 인식 할 수없는 선택기
하지만 내 클래스 확장을 추가하는 경우 직접 인스턴스 0x340c로 전송 응용 프로그램 (내 프레임 워크 외부)에서, 그것은 잘 작동 ...
어떤 힌트?
** 수정 **
당신의 일부가 물었다, 나는이 -all_load 및 '기타 링커 플래그'에 -ObjC 옵션을 추가했지만 문제가 남아있다.
굉장! 그것은 작동합니다. 내 응용 프로그램 대상에 -ObjC 링커 플래그 만 추가했는데 이것이 작동합니다. 나는 질문이있다. 내 프레임 워크에서 SQLite 데이터베이스를 관리하는 클래스를 만들었으므로 libsqlite3.dylib에 대한 링크가 필요합니다. 내 응용 프로그램에서이 새 링커 플래그를 사용하여 프레임 워크를 추가 할 때 libsqlite3.dylib를 링크하지 않은 사실로 인해 컴파일 오류가 발생합니다. 이미 프레임 워크에 링크되어 있어도 (분명히 알 수 없습니다. 충분히). 어쩌면 내가 뭔가를 놓치고있어 ... – Niko
이것은 아마도 별도의 질문으로 간주됩니다. 일반적으로 응용 프로그램에서 종속 라이브러리를 명시 적으로 링크해야합니다. 사용자 정의 프레임 워크를 링크하면 종속 라이브러리를 가져 오는 것이 좋지만 이렇게하는 방법은 없다고 생각합니다. –