2011-07-19 151 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。 =) –

相關問題