如何通过索引从NSMutableArray计算对象NSArray

时间:2013-12-15 04:34:55

标签: objective-c nsmutablearray nsarray

我有NSMutableArray,其中包含NSArray和String:

NSMutableArray *alphabets = [[NSMutableArray alloc] init];
[alphabets addObject:[NSArray arrayWithObjects:@"ㄱ",@"ㄲ", nil]];
[alphabets addObject:@"ㄴ"];
[alphabets addObject:[NSArray arrayWithObjects:@"ㄷ",@"ㄸ", nil]];
[alphabets addObject:@"ㄹ"];
[alphabets addObject:@"ㅁ"];
[alphabets addObject:[NSArray arrayWithObjects:@"ㅂ",@"ㅃ", nil]];
[alphabets addObject:[NSArray arrayWithObjects:@"ㅅ",@"ㅆ", nil]];
[alphabets addObject:@"ㅇ"];
[alphabets addObject:[NSArray arrayWithObjects:@"ㅈ",@"ㅉ", nil]];
[alphabets addObject:@"ㅊ"];
[alphabets addObject:@"ㅋ"];
[alphabets addObject:@"ㅌ"];
[alphabets addObject:@"ㅍ"];
[alphabets addObject:@"ㅎ"];

我想检查索引的对象数是否大于1然后我可以知道我的字母表包含具有多个值的数组。这是代码:

for (int i = 0 ; i < [alphabets count]; i++){
    if([[alphabets objectAtIndex:i] count] > 1){
         NSLog(@"multiple values");
    }else{
            NSLog(@"%@", [alphabets objectAtIndex:i]);
    }    
}

但代码总是会出错。

这是错误: 无法识别的选择器发送到实例0x2d550

如何按索引计算对象? 请帮我解决一下。

感谢

4 个答案:

答案 0 :(得分:2)

您无法将邮件count发送至NSString。由于您的数组中混合了NSStringNSArray个对象,因此您需要添加一项检查,以确定您仅向count发送NSArray,而不是NSString S:

for (int i = 0 ; i < [alphabets count]; i++){
    if([[alphabets objectAtIndex:i] isKindOfClass:[NSArray class]] && [alphabets objectAtIndex:i].count > 1){
         NSLog(@"multiple values");
    }else{
         NSLog(@"%@", [alphabets objectAtIndex:i]);
    }    
}

答案 1 :(得分:2)

这是一种使用快速枚举的方法:

for (NSObject *object in alphabets) {
    if ([object respondsToSelector:@selector(count)]) {
        // It's probably an array
        NSArray *array = (NSArray *)object;
        NSLog(@"multiple values in array with count %d", array.count);
    } else {
        NSLog(@"%@", object);
    }
}

这样可以防止将count发送到错误的对象。

提醒一句:respondsToSelector:只检查一个选择器和其他对象可能响应count但不是数组。 (NSDictionary就是一个例子。)在这种情况下,您可以使用其他类似的测试,例如isKindOfClass:

答案 2 :(得分:1)

如果您只想检查对象是否为数组,请使用

if([something isKindOfClass:[NSArray class]]){
    NSLog(@"It's an array");
}

答案 3 :(得分:0)

您的NSMutableArray包含两种不同的对象:NSString对象和NSArray对象。因此,使用来自此数组的对象的每个人都必须检查他们获得的对象是NSString还是NSArray。

如果您只使用一个NSString添加NSArray对象而不是添加普通的NSString对象,那么对于其余代码可能会更容易。