0

我有一个 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'
4

2 回答 2

3

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

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

于 2012-10-01T17:37:29.553 回答
1

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

我刚刚在一个新的 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");
    }
}
于 2012-10-01T17:37:15.860 回答