我试图遍历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'
答案 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:
,因为它会更有效。
您可能还想重新考虑生成此嵌套数组结构的代码,或者您通常使用的架构,因为它似乎......不必要。没有进一步的信息,就没有什么可做的。