将BOOL传递给makeObjectsPerformSelector:withObject:

时间:2011-03-21 07:18:31

标签: iphone nsarray

我想将BOOL作为参数传递给[NSArray makeObjectsPerformSelector:withObject:]。 E.g。

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

上面的代码不起作用,因为withObject只接受id。

这样做的正确方法是什么?

我看到了一些代码:

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

这在4.2模拟器上工作正常但在4.2 iphone上失败。

4 个答案:

答案 0 :(得分:10)

您可以编写一个UIButton(甚至UIView)类别,允许您将setEnabled:与对象一起使用。

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

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

然后你可以使用

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

答案 1 :(得分:6)

我记得我不得不做一些事情,而不仅仅是withObject:@YES,但由于我再也找不到它了,我发现它与

同时发挥作用
[buttons enumerateObjectsUsingBlock:^(NSButton *item, NSUInteger idx, BOOL *stop) 
    {[item setEnabled:YES];}];

或更快/更旧/可读的:)方式:

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

应该知道enumerateObjectsUsingBlock并不是特别快,但它不应该是一个巨大的杀手:)如果你想要快速,你也可以用for (;;)块来做,当然:)

答案 2 :(得分:3)

答案 3 :(得分:0)

如果您以静态方式传递BOOL参数,那么link中的答案将会有所帮助..