PyObjC: как удалить существующий класс Objective-C - PullRequest
2 голосов
/ 09 сентября 2011

Я создал класс ObjC ранее.Как я могу удалить его снова?Потому что на более позднем этапе я хочу воссоздать его с помощью другой версии.

Прямо сейчас, если я просто переопределю его, я получу исключение X is overriding existing Objective-C class.

1 Ответ

3 голосов
/ 09 сентября 2011

Я не знаю, как это сделать в PyObjC, но функция выполнения Objective C для этого должна быть objc_disposeClassPair().Немного поиска привело к указанию, что использование этой функции времени выполнения Objective C может не работать в PyObjC:

Сообщение фиксации PyNbjC SVN от января 2008 года гласит: Initial attempt of using objc_disposeClassPair. Disabled because this causes an unexpected crash. http://blog.gmane.org/gmane.comp.python.pyobjc.cvs/month=20080101

рассматриваемый код все еще находится в текущем class-builder.m исходного кода PyObjC в строке 164ff и содержит префикс интересного комментария:

    /*
     * 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;
    }

При этом я никогда не использовал это в самом Objective-C иЯ не знаю много о PyObjC.Надеюсь, это поможет.

...