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

Loop through array then compare current object to string

我正在尝试遍历 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'

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

这是一个快速修复:

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:,因为它的性能会更高。

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