2010-10-04 9 views
7

मेरे पास निम्न त्रुटि है जो इस त्रुटि का उत्पादन कर रहा है। मैं समझ नहीं पा रहा हूं कि subarrayWithRange संदेश स्ट्रिंग में क्यों भेजा जा रहा है? जब यह स्पष्ट रूप से एक सरणी है?अनजान चयनकर्ता को भेजा गया [एनएससीएफस्ट्रिंग सबएरे विथेंज:]

static const int kItemsPerView = 20; 
NSRange rangeForView = NSMakeRange(page * kItemsPerView, kItemsPerView); 

NSMutableArray *temp = [[APP_DELEGATE keysArray] mutableCopyWithZone:NULL]; 
NSArray *itemsForView = [temp subarrayWithRange:rangeForView]; 

for (int loopCounter = 0;loopCounter < r*c;loopCounter++){ 
    NSLog(@"%i: %@ ", loopCounter, [itemsForView objectAtIndex:loopCounter]); 
} 

त्रुटि:

-[NSCFString subarrayWithRange:]: unrecognized selector sent to instance 0x6b071a0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: [NSCFString subarrayWithRange:]: 

धन्यवाद

उत्तर

29

त्रुटियों के इन प्रकार के आम तौर पर स्मृति-प्रबंधन से संबंधित हैं। अनिवार्य रूप से, आप किसी ऐसे पते पर एक संदेश भेज रहे हैं जो अब किसी अन्य ऑब्जेक्ट द्वारा कब्जा कर लिया गया है क्योंकि पिछला occupant अप्रत्याशित रूप से गायब हो गया है। चूंकि उस स्थान की जगह किसी भी चीज़ पर कब्जा कर लिया जा सकता है, इसलिए आप एक एनएससीएफस्ट्रिंग से पूछ रहे हैं जिस पर यह प्रतिक्रिया नहीं देता है।

यदि आप temp सरणी बनाने के बाद डीबगर को रोक देते हैं, तो आप temp को असाइनमेंट को क्या देखते हैं? मैं अनुमान लगा रहा हूं कि कुछ भी सही नहीं है -कुसएरे रिटर्न देता है। आप दोबारा जांचना चाहेंगे कि जो कुछ भी वापस लौटाया जाता है उसमें स्मृति को कैसे संभाला जाता है। नाम से, मुझे लगता है कि आपके ऐप प्रतिनिधि के पास एक आवृत्ति चर के रूप में "keysArray" नामक एक सरणी है। शायद इसे बनाए या असाइन किए जाने पर ठीक से बनाए रखा नहीं जा रहा है?

+0

निर्माण के बाद, 'temp' 80 तार की एक सरणी, डिबग टूलटिप केवल यकीन है कि 10 आइटम यद्यपि नहीं दिखाता है कि सिर्फ Xcode है या नहीं है? आप सही कुंजी हैंअरे मेरे ऐप प्रतिनिधि में एक आवृत्ति चर है, एक संपत्ति जिसे परिभाषित किया गया है (nonatomic, retain) और फिर एक सुविधा विधि 'arrayWithContentsOfFile' का उपयोग करके संश्लेषित और असाइन किया गया है। मुझे इसे मैन्युअल रूप से बनाए रखने की आवश्यकता नहीं है? – joec

+0

हां। आपने इसे नहीं बनाया, सुविधा विधि ने किया। इसलिए, यदि आप इसे बनाए जाने के बाद चारों ओर चिपकना चाहते हैं, तो आपको बनाए रखने (या अपनी खुद की एक प्रति बनाकर) दावा करने की आवश्यकता है। मेमोरी प्रबंधन नियमों पर एक और नज़र डालें। –

+0

यदि आप असाइन करने के बजाए संपत्ति एक्सेसर का उपयोग करते हैं, तो आपको बनाए रखने की आवश्यकता नहीं होगी; या, आप '[[NSArray alloc] initWithContentsOfFile: @" somepath "] को इसके बजाय कॉल कर सकते हैं। – jlehr

4

तो मेरे पास यह था। मैंने कुछ बेवकूफ किया। मैंने UITextView को इसकी टेक्स्ट प्रॉपर्टी की बजाय स्ट्रिंग में असाइन किया। अर्थात्:

myObj.txtbxThing = [NSString stringWithFormat:@"%@", stuffString]; 
बजाय

:

myObj.txtbxThing.text = [NSString stringWithFormat:@"%@", stuffString]; 
+0

में "असाइन करें" को बदलकर समस्या को ठीक किया मैंने कुछ बेवकूफ किया। मैंने एनएसआरटीआर को एनएसआरटीआर * को सौंपा * और * किसी भी तरह से इसके बारे में संकलक चेतावनी को याद किया। –

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

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