Ранее я создал класс ObjC. Как я могу удалить его снова? Потому что в какой-то момент я хочу воссоздать его в другой версии.
Прямо сейчас, если я просто объявлю его повторно, я получу исключение X is overriding existing Objective-C class
.
Ранее я создал класс ObjC. Как я могу удалить его снова? Потому что в какой-то момент я хочу воссоздать его в другой версии.
Прямо сейчас, если я просто объявлю его повторно, я получу исключение X is overriding existing Objective-C class
.
Я не знаю, как это сделать в PyObjC, но функция времени выполнения Objective-C для этого должна быть objc_disposeClassPair()
. Небольшой поиск показал, что использование этой функции среды выполнения Objective-C может не работать в PyObjC:
Сообщение фиксации PyObjC 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. Надеюсь это поможет.
objc_disposeClassPair
, но также сразу же получаю сбой. Интересно, почему...
- person Albert; 10.09.2011