2011-03-21 9 views
9

Quiero pasar BOOL a [NSArray makeObjectsPerformSelector:withObject:] como parámetro. P.ej.Pasando BOOL a makeObjectsPerformSelector: withObject:

[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: NO]; 

El código anterior no funcionará porque withObject solo acepta la identificación.

¿Cuál es la forma correcta de hacerlo?

he visto algo de código con esto:

[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: (id)kCFBooleanTrue]; 
[buttons makeObjectsPerformSelector:@selector(setEnabled:) withObject: (id)kCFBooleanFalse]; 

Esto funciona bien en el simulador de 4.2, pero falla en 4.2 iPhone.

Respuesta

10

Puede escribir una categoría UIButton (o incluso UIView) que le permita usar setEnabled: con un objeto.

@interface UIButton(setEnabledWithObject) 
- (void)setEnabledWithNSNumber:(NSNumber *)bNum; 
@end 

@implementation UIButton(setEnabledWithObject) 
- (void)setEnabledWithNSNumber:(NSNumber *)bNum { 
    [self setEnabled:[bNum boolValue]]; 
} 
@end 

y entonces se podría utilizar

[buttons makeObjectsPerformSelector:@selector(setEnabledWithNSNumber:) withObject:[NSNumber numberWithBool:NO]]; 
[buttons makeObjectsPerformSelector:@selector(setEnabledWithNSNumber:) withObject:[NSNumber numberWithBool:YES]]; 
+0

¡Gracias! Esto funcionará Ojalá tengan una forma más simple de hacerlo. –

5

Recuerdo uno tenía que hacer algo más que simplemente withObject:@YES pero ya no puedo encontrar nunca más me di cuenta de que funciona tan bien con

[buttons enumerateObjectsUsingBlock:^(NSButton *item, NSUInteger idx, BOOL *stop) 
    {[item setEnabled:YES];}]; 

O el/:) manera más rápida mayores/readabler:

for (NSButton *item in buttons) {[item setEnabled:YES];}; 

Uno debe saber que enumerateObjectsUsingBlock no le será muy rápido, pero no debería ser un gran asesino aquí de todos modos :) Si usted quiere rápidamente también se puede hacer eso con un bloque for (;;), seguro :)

0

Si está Al pasar los parámetros de BOOL en estática, entonces mi respuesta en link será útil.

Cuestiones relacionadas