2012-04-01 46 views
8

我通過一個NSString對象循環稱爲previouslyDefinedNSString,並驗證是否代表一個字母的ASCII值的整數處於的NSMutableSet稱爲mySetOfLettersASCIIValues,這是我之前曾與NSIntegers填充:爲什麼我在objective-c中得到一個整數指針轉換錯誤?

NSInteger ASCIIValueOfLetter; 

    for (int i; i < [previouslyDefinedNSString length]; i++) { 

     ASCIIValueOfLetter = [previouslyDefinedNSString characterAtIndex:i]; 

     // if character ASCII value is in set, perform some more actions... 
     if ([mySetOfLettersASCIIValues member: ASCIIValueOfLetter]) 

但是,我得到這個錯誤在IF語句的條件之內。

Incompatible integer to pointer conversion sending 'NSInteger' (aka 'int') to parameter of type 'id'; 
Implicit conversion of 'NSInteger' (aka 'int') to 'id' is disallowed with ARC 

這些錯誤是什麼意思?我如何轉換爲對象類型(哪個id表示,對吧?)? NSInteger不是一個對象嗎?

+0

'member:'大概期待'id'。你給它一個整數。 – 2012-04-01 03:25:07

+1

好的,所以這裏的問題是一個集合必須包含objective-c對象,而不是像NSInteger那樣的標量值。 – lnafziger 2012-04-01 03:27:58

+0

檢查:對(INT I = 0; ... – Gargo 2012-04-01 08:12:12

回答

19

你想讓它一個NSNumber,如:

NSInteger ASCIIValueOfLetter; 

    for (int i; i < [previouslyDefinedNSString length]; i++) { 

     ASCIIValueOfLetter = [previouslyDefinedNSString characterAtIndex:i]; 

     // if character ASCII value is in set, perform some more actions... 
     if ([mySetOfLettersASCIIValues member: [NSNumber numberWithInteger: ASCIIValueOfLetter]]) 

現在你將有你要找的結果。

+1

我的解決方案如何離奇......是initWithStyle:[NSNumber的numberWithInteger:UITableViewCellStyleDefault],而不是initWithStyle:UITableViewCellStyleDefault – Morkrom 2013-05-15 15:32:11

11

這些錯誤意味着member:需要一個對象。 id是一個指向Objective-C對象的指針,而不是一個對象,而是傳入一個原始類型或標量(儘管前綴NS-NSInteger不是一個對象 - 只是一個typedef到原始值,而在你的情況,int)。你需要做的是將這個標量值包裝在一個對象中,具體來說就是NSNumber,這是一個專門設計來處理這個問題的類。

與其說member:ASCIIValueOfLetter的,你需要包裝的價值,[NSNumber numberWithInteger:ASCIIValueOfLetter]調用它,如毛裏西奧提及。

+2

+1解釋了整個交易。 – 2014-04-19 02:55:07