我有一个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'
答案 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");
}
}