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.