指针和整数错误之间的比较

时间:2011-07-19 02:50:48

标签: iphone objective-c

for(NSInteger i = 0; i<[_tempPostalCodeList count]; i++){
            ***if(individualInfo.postalCode == [[_tempPostalCodeList objectAtIndex:i] postalCode])***{
                myAnnotation.title = [NSString stringWithFormat:@"%i Records!", [[_postalCount objectAtIndex:i] intValue]];
            }
    }

我不知道这段代码有什么问题。该行有错误。  这适用于Java但不适用于目标c。 =(有人帮助

1 个答案:

答案 0 :(得分:4)

尽管问题中缺少大量信息,但我的精神力量告诉我问题是-objectAtIndex:类的消息NSArray返回类型为{{1}的通用对象}。因此,表达式id正在将[[_tempPostalCodeList objectAtIndex:i] postalCode]消息发送到类型为postalCode的对象。由于编译器不知道实际对象的基础类型,因此无法推断出id消息的返回类型,因此它假定它也返回postalCode

id是一个指针类型,由于id是一个整数类型,编译器认为你在​​评估postalCode运算符时尝试将指针与整数进行比较,因此警告。修复此问题的方法是插入强制转换或引入临时变量:

==

您可以在没有强制转换的情况下使用临时变量的原因是因为// Option #1: Use a cast if(individualInfo.postalCode == [(MyClass*)[_tempPostalCodeList objectAtIndex:i] postalCode]) { ... } // Option #2: Use a temporary variable MyClass *obj = [_tempPostalCodeList objectAtIndex:i]; if(individualInfo.postalCode == obj.postalCode) { ... } 类型(由id返回)可以通过简单赋值隐式转换为任何Objective-C类类型(类似于如何在C(但不是C ++)中,-objectAtIndex:类型可以隐式地转换为任何指针类型。)