преобразование блока в void * для разрешения метода динамического класса

+(BOOL)resolveClassMethod:(SEL)aSel {
    NSString *lString = NSStringFromSelector(aSel);

    if ([self validateLetterAndAccidental:lString]) {

        id (^noteFactoryBLOCK)(id) = ^(id aSelf) {
            return [self noteWithString:lString];
        };

        IMP lIMP = imp_implementationWithBlock(noteFactoryBLOCK);
        ...

Я получаю сообщение об ошибке в последней строке, потому что noteFactoryBLOCK преобразуется в void *, а ARC запрещает это. Есть ли в настоящее время способ добиться того, что я хочу? Мне нужен IMP, который я могу передать class_addMethod во время выполнения.

EDIT

    IMP myIMP = imp_implementationWithBlock(objc_unretainedPointer(noteFactoryBLOCK));

Эта строка дает мне предупреждение вместо ошибки - Семантическая проблема: передача 'objc_objectptr_t' (также известного как 'const void *') параметру типа 'void *' отбрасываются квалификаторы

7
задан griotspeak 15 June 2011 в 14:08
поделиться