我想调用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方法?
答案 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"];