Lo siguiente pasará la prueba respondsToSelector
, pero SIGABRT
en la llamada real a [viewController selector]
o [viewController action:selector]
. La traza de pila indica 'NSInvalidArgumentException, razón: - [MyViewController selector]: selector no reconocido'.Enviando mensaje al objeto usando selector y NSSelectorFromString
[viewController @selector(selector)]
causará un error de compilación (error: esperado ':' antes 'selector').
Cuando el selector está codificado, todo funciona bien.
¿Cómo envío un mensaje a un objeto a través de un selector?
-(void) notifyViewControllers:(NSString*) message
{
if(!message) return;
SEL selector = NSSelectorFromString(message);
if(!selector) return;
NSArray* viewControllers = [self.tabBarController viewControllers];
if(!viewControllers) return;
for (UIViewController* viewController in viewControllers)
{
if(!viewController) continue;
if ([viewController respondsToSelector:selector]) {
// [viewController selector];
[viewController action:selector];
}
}
}
Gracias Vladimir. Rakesh te ganó con eso (performSelector) - pero el tuyo fue precisamente el correcto. – jww