2011-09-09 3 views
2

기존의 나는 ObjC 클래스 이전에 생성. 다시 삭제하려면 어떻게해야합니까? 나중에 다른 버전으로 다시 만들고 싶습니다. 난 그냥 재 선언하는 경우PyObjC는 : 삭제하는 방법 오브젝티브 C 클래스

는 지금, 나는 예외 X is overriding existing Objective-C class를 얻을.

답변

3

내가 PyObjC에서이 작업을 수행하는 방법을 모르겠지만,이 일을위한 오브젝티브 C 런타임 기능은 objc_disposeClassPair()을해야합니다. 조금 주위에 검색이 목표 - C 런타임 기능을 사용하는 PyObjC에서 작동하지 않을 수 있다는 표시 굴복 : 1 월 2008

PyObjC SVN 메시지 커밋을 읽어 Initial attempt of using objc_disposeClassPair. Disabled because this causes an unexpected crash.http://blog.gmane.org/gmane.comp.python.pyobjc.cvs/month=20080101

문제의 코드는 현재 여전히

말했다되고 그건
/* 
    * Call this when the python half of the class could not be created. 
    * 
    * Due to technical restrictions it is not allowed to unbuild a class that 
    * is already registered with the Objective-C runtime. 
    */ 
    int 
    PyObjCClass_UnbuildClass(Class objc_class __attribute__((__unused__))) 
    { 
     PyObjC_Assert(objc_class != nil, -1); 
     PyObjC_Assert(objc_lookUpClass(class_getName(objc_class)) == nil, -1); 

     //objc_disposeClassPair(objc_class); 
     return 0; 
    } 

, 내가 목표 - C 자체에서 이것을 사용한 적이 내가 PyObjC에 대해 잘 모르는 : 라인 164ff에서 PyObjC의 소스의 클래스 builder.m와는 흥미로운 코멘트로 시작된다. 희망이 도움이됩니다.

+0

나는 objc_disposeClassPair' 그러나 나는 즉시 충돌을 얻을'호출하는 ctypes를 통해 노력했다. 나는 왜 ... 궁금하다. – Albert

+0

아, 나는 그것을 관리했다. 나는 ctypes 함수 중 잘못된 argtype을 설정했을 수도 있습니다. [이 예] (https://github.com/albertz/chromehacking/blob/master/disposeClass.py)가 작동합니다. – Albert

관련 문제