检查NSArray值

时间:2012-10-01 17:32:34

标签: objective-c arrays if-statement

我有一个NSArray(RSIatAddr),我想检查给定索引处的对象是否为0(或其他任意常量),但下面的代码没有给出警告/错误;但是正在抛出异常

if ([[RSIatAddr objectAtIndex:j] isEqualToNumber:nil]) {
    [sumRSI addObject:[NSNumber numberWithInt:[[RSIatAddr objectAtIndex:j]intValue]*
    [[sumRSI objectAtIndex:j] intValue]]]; }

我得到的错误:

2012-10-02 00:42:00.266 NetSearch+DetectLocation[3741:707] 
*** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '-[__NSCFNumber compare:]: nil argument'

2 个答案:

答案 0 :(得分:3)

isEqualToNumber:NSNumber作为参数,而不是您传递的整数。

您正在使用的整数0恰好是nil的值,但任何整数都不太可能是NSNumber的有效指针值,因此也会崩溃。

答案 1 :(得分:1)

如果没有看到实际填充数组的代码,那么数组可能会保留与您预期不同的类型。尝试在该行代码之前设置一个断点,然后键入“po [[RSIatAddr objectAtIndex:j] class]”并查看实际存在的内容,然后您也可以在调试窗口中尝试使用isEqualToNumber来查看是否成功。 / p>

我刚刚在新的iOS应用程序的AppDelegate中实现了它,它可以工作:

NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:0], [NSNumber numberWithInt:1], nil];
NSLog(@"%@", array);

for (NSNumber *num in array) {
    if ([num isEqualToNumber:[NSNumber numberWithInt:0]]) {
        NSLog(@"Equal");
    } else {
        NSLog(@"Not Equal");
    }
}