2012-11-14 3 views
0

저는 지금 당분간이 문제에 시달리고 있습니다.AppKit 클래스의 비공개 메소드 이름 얻기

컨트롤에서 미성년자를 변경하려는 경우가 많았지 만 조정하려면 전체를 다시 그려야했습니다.

- (void)_drawContextMenuHighlightForIndexes:(NSIndexSet *)rowIndexes clipRect:(NSRect)rect; 
: 는 NSPathControl처럼, 난 그냥 경로 컨트롤의 배경을 변경하고 싶어, 나는

애플이 다음과 같이 개인 방법을 사용 ... 그냥 작은 조정을위한 완전히 새로운 컨트롤을 만드는 결국

나는 이것을 Stackoverflow-Post에서 발견했다.

이러한 정보는 어떻게 알 수 있습니까? 나는 그 사람들이 공개 될 의도는 없다고 생각하지만 이것은 쉬운 방법 일뿐입니다. 이 사람들은 어디에서이 사실을 알고 있습니까? 참조가 있습니까? 소스 코드를 알 필요는 없으며 개인 메서드의 이름 만 알아야합니다.

내 질문에 어떻게 AppKit 클래스의 비공개 메소드 이름을 얻을 수 있습니까?

감사

+2

하는 것으로 App Store. 그 물건은 사유로 사적입니다. – bbum

+0

나는 그것이 가능할 때마다 이것을 피할 것임을 알고있다. – NSAddict

답변

2

개인 클래스 메소드 이름은 Obj-C runtime functions를 사용하여 얻을 수 있습니다. 당신이 뭔가를 할 수있는 클래스의 방법의 목록을 얻으려면 : 또한 class-dump라는이 작업을 수행하는 핸디 터미널 도구가

unsigned int methodCount; 
Method *methods = class_copyMethodList(theClass, &methodCount); 
for (int i = 0; i < methodCount; i++) { 
    Method method = methods[i]; 
    NSString *methodName = NSStringFromSelector(method_getName(method)); 
    // collect name in an array or print it. 
} 
free(methods); 

.

+0

클래스 덤프 도구는 매력처럼 작동했습니다. 감사 – NSAddict

1

당신은 클래스가있다거나

NSLog(@"%@", [obj dump]); 

하지 NSObject의에 카테고리를 추가하여 런타임에이 작업을 수행 GitHub의에서 편리한 도구 (DDDump)를 사용하는 방법/속성/변수의 런타임을 쿼리 요청했지만이 컨텍스트에서 실제로 유용합니다. NSObjCMessageLoggingEnabled 환경 변수 - 예 - 모든 발송 완료를 볼 수 있습니다.


오와 모든 알림을 얻는 것은 항상 좋은 생각이 너무 :

AppKit의 (또는 다른 시스템 프레임 워크)의 내부를 변경하는 문제를 일반적으로 유행하고 거부 반응의 위험에서 실행
관련 문제