在NSArray中的每个对象上调用setter

时间:2013-12-06 21:59:39

标签: objective-c

我想调用NSArray中的所有setter。通过调试器运行以下代码后,availPlayers中有1个对象,但_chosen属性仍为YES:

@interface Player : NSObject
@property (nonatomic, getter = isChosen) BOOL chosen;
@end

并在我的操作方法

SEL chosenSetter = @selector(setChosen:);
[availPlayers makeObjectsPerformSelector:chosenSetter withObject:@NO];

我是否需要在我的播放器实现中添加setter方法?

3 个答案:

答案 0 :(得分:2)

selected是BOOL类型的属性,它不是对象。您需要迭代数组并在每个元素上调用setChosen或将所选属性更改为对象。 (如果需要BOOL的对象表示,可以使用NSNumber)

答案 1 :(得分:0)

您可以实现一个采用NSNumber

的自定义setter方法
- (void)setChosenProperty:(NSNumber *)value{
    self.chosen = [value boolValue];
}

然后调用此setter

SEL chosenSetter = @selector(setChosenProperty:);
[availPlayers makeObjectsPerformSelector:chosenSetter withObject:@NO];

答案 2 :(得分:0)

您可以使用键值编码:

KVC: Representing Non-Object Values

  

valueForKey的默认实现:和setValue:forKey:支持非对象数据类型(包括标量和结构)的自动对象包装。

并且NSArrays将键值消息转发给每个对象:

  

setValue:forKey:
  使用指定的值和键在每个数组项上调用setValue:forKey:。

这应该有效:

[availPlayers setValue:@NO forKey:@"chosen"];