循环数组然后将当前对象与字符串进行比较

时间:2015-03-30 21:35:20

标签: ios objective-c nsarray

我试图遍历NSArray并检查objectAtIndex是否等于string

NSLog(@"%@", myArray) // 3 items. 1 of them is "a"
for (id object in myArray)
{
    NSLog(@"What"); // 3 times
    if ([object isEqual:@"a"]) {
        NSLog(@"Hello"); // Never gets executed
    }
}

问题是,if语句中的NSLog永远不会执行吗?

修改

(
        (
        a
    ),
        (
        01
    ),
        (
        a
    ),
        (
        03
    )
)

当我将其设置为isEqualToString时,我收到此错误:

2015-03-30 14:42:54.206 MyApp[1575:50954] -[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x7fe721ce3bf0
2015-03-30 14:42:54.215 MyApp[1575:50954] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x7fe721ce3bf0'

1 个答案:

答案 0 :(得分:1)

你的问题是你有一个包含三个子数组的数组,每个子数组包含一个字符串,大概是一个字符串。您可以告诉这一点,因为日志输出中的字符串周围有额外的(),以及它告诉您尝试将选择器发送到__NSArrayM。< / p>

这是一个快速修复:

NSLog(@"%@", myArray) // 3 items. 1 of them is "a"
for (NSArray *array in myArray)
{
    NSLog(@"What"); // 3 times
    if ([array.firstObject isEqualToString:@"a"])
    {
        NSLog(@"Hello"); // Never gets executed
    }
}

但正如其他人指出你可能想要使用isEqualToString:,因为它会更有效。

您可能还想重新考虑生成此嵌套数组结构的代码,或者您通常使用的架构,因为它似乎......不必要。没有进一步的信息,就没有什么可做的。