OC 정적 라이브러리 NSClassFromString nil의 해결

1352 단어 String
정적 라이브러리에 클래스 이름에서 클래스로 반사되는 코드가 있다면 다음과 같습니다.
NSString *myClassStr = @"myClass";  

Class myClazz = NSClassFromString(myClassStr);  

if (myClazz) {  

    id myClassInit = [[myClazz alloc] init];  

}

(항상) Class가nil인 경우 인터넷 검색에서 일반적으로 이렇게 말한다.
The class object named by aClassName, or nil if no class by that name is currently loaded. If aClassName is nil, returns nil.


64비트 시스템의 버그:
IMPORTANT: For 64-bit and iPhone OS applications, there is a linker bug that prevents -ObjC from loading objects files from static libraries that contain only categories and no classes. The workaround is to use the -all_load or -force_load flags. -all_load forces the linker to load all object files from every archive it sees, even those without Objective-C code. -force_load is available in Xcode 3.2 and later. It allows finer grain control of archive loading. Each -force_load option must be followed by a path to an archive, and every object file in that archive will be loaded.


내 실측에 대해 우선, 정적 라이브러리의 항목이 아니라 주 항목 (target) 에서build setting을 변경해야 합니다.그 다음에 -all_load 유효하고 -force_load 심지어 컴파일도 끝내지 못한다. 그 위에 메인 프로젝트(정적 라이브러리를 인용한 프로젝트)의build setting에서 검색other linker flags을 한 다음에 -all_load를 추가하면 된다.

좋은 웹페이지 즐겨찾기