Objective C - NSMutableArrays - 对于每个

时间:2014-02-05 17:12:04

标签: objective-c

我想知道是否有更好的方法在NSMutableArray中设置属性值中的每个对象?

//player.h
@interface Player : NSObject
@property BOOL isEliminated;

//test.h
@property NSMutableArray *players;

//test.m
for(Player *p in self.players)
{
    p.isEliminated = NO;
}

我对xCode很新,我有一个C#背景。我知道C#& Linq可以提供非循环解决方案..我想知道这是否也可以使用Objective C

我在这里和那里搜索......我所能找到的是一种从数组中获取对象的方法,其中属性X等于某个值。

3 个答案:

答案 0 :(得分:6)

使用键值编码:

[self.players setValue:@NO forKey:@"isEliminated];

在数组的每个元素上设置属性。

请注意,即使属性是(标量)BOOL,您也必须使用Objective-C 数字对象@NO在这里。设置时,它会自动“翻译”为NO 属性。

答案 1 :(得分:0)

好吧,你可以使用块和NSArray s - (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block消息创建一个无环路解决方案。类似的东西:

[self.players enumerateObjectsUsingBlock:^(Player *p, NSUInteger idx, BOOL *stop) {
    p.isEliminated = NO;
}];

然而,这几乎不可读。在我看来,使用循环进行此类工作很好。

答案 2 :(得分:0)

您可以在NSMutableArray上使用makeObjectsPerformSelector:方法来设置NSMutableArray中所有对象的更改值:

[self.players makeObjectsPerformSelector:@selector(setIsEliminated:) withObject:@NO];