2012-04-01 14 views
8

मैं एक NSString वस्तु के माध्यम से पाशन कर रहा हूँ previouslyDefinedNSString और पुष्टि कहा जाता है, तो पूर्णांक एक पत्र का ASCII मूल्य का प्रतिनिधित्व एक NSMutableSet mySetOfLettersASCIIValues कहा जाता है, जो मैं पहले से NSIntegers साथ आबादी था:मैं उद्देश्य-सी में सूचक रूपांतरण त्रुटि के लिए एक पूर्णांक क्यों प्राप्त कर रहा हूं?

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]) 

हालांकि, मैं हो रही है आईएफ स्टेटमेंट की स्थिति में यह त्रुटि।

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 

इन त्रुटियों का क्या अर्थ है? मैं किसी ऑब्जेक्ट प्रकार में परिवर्तित कैसे हो रहा हूं (कौन सी आईडी दर्शाती है, है ना?)? एनएसआईएनटेगर एक वस्तु नहीं है?

+0

'सदस्य: 'संभावित रूप से' आईडी' की अपेक्षा करता है। आप इसे एक पूर्णांक दे रहे हैं। –

+1

ठीक है, तो यहां समस्या यह है कि एक सेट में उद्देश्य-सी ऑब्जेक्ट्स होना चाहिए और एनएसआईएनटेगर जैसे स्केलर मान नहीं होना चाहिए। – lnafziger

+0

जांचें: के लिए (int i = 0; ... – Gargo

उत्तर

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

11

इन त्रुटियों का अर्थ है कि member: किसी ऑब्जेक्ट की अपेक्षा करता है। id किसी ऑब्जेक्टिव-सी ऑब्जेक्ट के लिए एक पॉइंटर है, और किसी ऑब्जेक्ट के बजाय, आप एक आदिम प्रकार या स्केलर में गुज़र रहे हैं (इसके NS- उपसर्ग के बावजूद, NSInteger कोई ऑब्जेक्ट नहीं है - केवल typedef एक आदिम मान पर, और में आपका मामला, int)। आपको क्या करना है उस वस्तु में स्केलर मान लपेटना है, और विशेष रूप से, NSNumber, जो विशेष रूप से इसे संभालने के लिए डिज़ाइन किया गया एक वर्ग है।

को ASCIIValueOfLetter के साथ कॉल करने के बजाय, आपको इसे लिपटे मूल्य, [NSNumber numberWithInteger:ASCIIValueOfLetter] के साथ कॉल करने की आवश्यकता है, जैसा कि मॉरीसिओ ने उल्लेख किया था।

+2

+1 पूरे सौदे को समझाया गया। –

संबंधित मुद्दे