estatica clase objective-c dynamic casting implementation void-pointers

objective c - estatica - lanzando un bloque a un vacío*para la resolución dinámica del método de clase



clase estatica c# (1)

+(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); ...

Aparece un error en la última línea porque noteFactoryBLOCK se convierte en un vacío * y ARC no lo permite. ¿Hay actualmente una manera de lograr lo que quiero? Me gustaría un IMP que pueda pasar a class_addMethod en tiempo de ejecución.

EDITAR

IMP myIMP = imp_implementationWithBlock(objc_unretainedPointer(noteFactoryBLOCK));

Esta línea me da una advertencia en lugar de un error - Semantic Issue: Passing ''objc_objectptr_t'' (aka ''const void *'') to parameter of type ''void *'' discards qualifiers


Odio decirlo, pero tal vez tengas que descartar la const en este caso.

IMP myIMP = imp_implementationWithBlock((void*)objc_unretainedPointer(noteFactoryBLOCK));

Eso es bastante feo sin embargo.