2011-07-19 64 views
1
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。 =(有人pl​​z帮助指针和整数错误之间的比较

+1

'postalCode'的类型是什么?什么是完整的错误? –

+2

您确实需要发布更多关于您正在使用的不同类型的信息,以便提供有效的帮助。疯狂的猜测是,individualInfo.postalCode是一个原始类型(如int),并且postalCode是一个NSNumber – dreyln

+0

如果邮政编码是任何类型的对象,您可能试图使用isEqual:? – thelaws

回答

4

尽管缺少了很多的问题的资料,我的精神力量告诉我,这个问题是该消息的NSArray类的-objectAtIndex:返回id类型的通用对象。因此,表达式[[_tempPostalCodeList objectAtIndex:i] postalCode]正在向id类型的对象发送postalCode消息。由于编译器不知道实际对象的基础类型,因此无法推断出消息的返回类型,因此它假定它也返回id

id是一个指针类型,并且由于postalCode是一个整型,所以th e编译器认为你正在试图比较一个指针和一个整数,因为它在计算==运算符,因此是警告。解决这个问题的办法是要么插入一个演员,或者引入一个临时变量:

// 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型(-objectAtIndex:返回)可以隐通过简单赋值转换为任何Objective-C类类型(类似于C(但不是C++)中的类型,void*类型可隐式转换为任何指针类型)。

+0

天才!感谢Adam。 =) –

相关问题