2011-03-21 2 views
9

BOOL을 [NSArray makeObjectsPerformSelector:withObject:]에 전달하려고합니다. 예 :makeObjectsPerformSelector에 BOOL 전달 : withObject :

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

withObject는 id 만 허용하기 때문에 위 코드는 작동하지 않습니다.

옳은 방법은 무엇입니까?

은 이걸로 몇 가지 코드를 볼 수 :이 4.2 시뮬레이터에서 잘 작동하지만 4.2 아이폰에 실패

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

.

답변

10

개체와 함께 setEnabled :를 사용할 수있는 UIButton (또는 심지어 UIView) 범주를 작성할 수 있습니다.

@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]]; 
+0

고마워요! 이것은 효과가있다. 나는 그들이 그것을하는 더 쉬운 길을 가지기를 바란다. –

5

를 사용할 수는 withObject:@YES보다 다른 뭔가를해야했다하지만 난 그게 더 이상 내가 알아 낸 찾을 수 없기 때문에 그것은

와 마찬가지로 잘 작동합니다
[buttons enumerateObjectsUsingBlock:^(NSButton *item, NSUInteger idx, BOOL *stop) 
    {[item setEnabled:YES];}]; 

또는 빠른/나이/readabler :) 방법 :

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

하나는 enumerateObjectsUsingBlock가 particularily 히 빠른 아니라는 것을 알아야하지만, 어쨌든 여기에 거대한 킬러 안 : 당신이 빨리 원하는 경우에 당신은 또한

0

: for (;;) 블록, 당신이 경우 그렇게 할 수 있습니다 정적에서 BOOL 매개 변수를 전달하면 내 대답은 link입니다.

관련 문제