使用valueForKeyPath获取特定数据

时间:2012-02-21 21:29:14

标签: ios

Printing description of self->data:
{
    root =     {
        participant =         (
                        {
                age =                 {
                    text = "\n        27";
                };
                class =                 {
                    text = "\n        M 25-29";
                };
                gender =                 {
                    text = "\n        M";
                };
            },
                        {
                age =                 {
                    text = "\n        27";
                };
                class =                 {
                    text = "\n        M 25-29";
                };
                gender =                 {
                    text = "\n        M";
                };
            },
                        {
                age =                 {
                    text = "\n        29";
                };
                class =                 {
                    text = "\n        M 25-29";
                };
                gender =                 {
                    text = "\n        M";
                };
            },

有一个我的数据的例子。真实记录是913项,包括男性和女性参与者。我如何将一个字典简化为男性或女性?

我试过了valueForKeyPath:@"root.participant.gender.text==M",但事实并非如此。我特别想分别了解男性和女性的class,以防有更好的方法。

2 个答案:

答案 0 :(得分:1)

您应该使用[[self valueForKeyPath:@"root.participant.gender.text"] isEqualToString:@"\n M"(引号不包含整个表达式并使用-isEqualToString:而不是valueForKeyPath:@"root.participant.gender.text==M"

答案 1 :(得分:0)

没有任何工作,所以我最终选择了这个

NSArray *participants = [self.data valueForKeyPath:@"root.participant"];
NSMutableArray *men = [[NSMutableArray alloc] init];
NSMutableArray *women = [[NSMutableArray alloc] init];

for(NSDictionary *p in participants) {
    NSString *t = [XMLReader cleanString:[p valueForKeyPath:@"chiptime.text"]];
    NSNumber *m = [NSNumber numberWithFloat:[self timeToMinutes:t]];
    if([[XMLReader cleanString:[p valueForKeyPath:@"gender.text"]] isEqualToString:@"M"]) {
        [men addObject:m];
    } else {
        [women addObject:m];
    }
}

XMLReader cleanString只取出\n\s*垃圾。