2011-06-19 18 views
8

मैं [myarray removeallobjects] के साथ एक NSMutableArray खाली करने की कोशिश कर रहा हूं; लेकिन मुझे exc_bad_access त्रुटि मिल रही है। क्या यह सरणी खाली करने का सही तरीका है? मैंने इसे शून्य पर सेट करने की कोशिश की लेकिन यह काम नहीं कर रहा है। वास्तव में मैं जो कर रहा हूं वह डेटा के साथ सरणी भर रहा है और उपयोगकर्ता के पास डेटा को "रीफ्रेश" करने का विकल्प है और मैं ताज़ा डेटा दर्ज करने से पहले सरणी को खाली करना चाहता हूं। मैं किसी भी कोड को पोस्ट नहीं कर सकता क्योंकि यह बहुत बड़ा है।ठीक से कैसे खाली करें NSMutableArray

+0

क्या आप उस भाग को जोड़ सकते हैं जहां आप सरणी में ऑब्जेक्ट जोड़ रहे हैं? –

+0

[checkinArray addObject: checkinsA]; [checkinsA.taggedID रिलीज]; [checkinsA.taggedName रिलीज]; [चेकइन्स ए रिलीज]; जहां चेकइन्स एक कस्टम ऑब्जेक्ट है। यह आदेश लूप में भी है। – BlackM

उत्तर

57

-[NSMutableArray removeAllObjects]NSMutableArray खाली करने का सही तरीका है। आपको सबसे अधिक दुर्घटना हो रही है क्योंकि आप अभी भी अपने यूआई में कहीं भी हटाए गए ऑब्जेक्ट्स का उपयोग कर रहे हैं।

+0

या ऑब्जेक्ट को जोड़ने के बाद ऑब्जेक्ट को ओवर-रिलीज़ किया गया था। –

0

आपको कोई दुर्घटना हो रही है क्योंकि आपकी सरणी स्मृति में अब मौजूद नहीं है।

मैं शर्त लगा सकता है क्योंकि आप इसे बनाए रखने के लिए भूल गया (या बहुत जल्दी इसे जारी) अपने alloc + init के बाद

आप शायद [NSMutableArray array] या arrayWithObjects: या उन वेरिएंट में से कुछ, या कहा जाता autorelease का उपयोग कर इसे बनाया है, जबकि अगर यह एक इंस्टेंस वैरिएबल है जिसे आपको तब तक बनाए रखना चाहिए जब तक ओबेटेट को हटाया न जाए।

ध्यान दें कि स्मृति एमजीएमटी आईओएस विकास का एक प्रमुख हिस्सा है। आगे बढ़ने से पहले इसे पूरी तरह से जानना सुनिश्चित करें (जैसे कि यह स्वाभाविक हो जाता है और जब आप बनाए रखने के लिए संकोच नहीं करेंगे और कब रिलीज़ करेंगे), इससे पहले कि आप इसे सही इस्तेमाल करते हैं, इससे आपको इससे बहुत परेशानी होगी।

+0

@property (nonatomic, retain) NSMutableArray * checkinArray; मेरे। एच में checkinArray = [[NSMutableArray alloc] init]; viewdidload में और [checkinArray रिलीज]; dealloc में (आखिरी व्यक्ति समस्या नहीं है क्योंकि यह भी दुर्घटनाग्रस्त है अगर मैं इस लाइन को dealloc से हटा दें)। क्या आप कुछ गलत देखते हैं? – BlackM

1

मुझे लगता है कि समस्या यह है कि आप टिप्पणी में प्रदान की है कोड के इस स्निपेट में है,

[checkinArray addObject:checkinsA]; 
[checkinsA.taggedID release]; 
[checkinsA.taggedName release]; 
[checkinsA release]; 

taggedID और taggedNamecheckinsA वस्तु की संपत्ति हैं। उन्हें केवल dealloc विधि में रिलीज़ किया जाना चाहिए। सरणी ऑब्जेक्ट पेड़ को बरकरार नहीं रखती है। यह केवल रूट ऑब्जेक्ट को बरकरार रखता है। तो यहां एक रिलीज नहीं होनी चाहिए। तो बीच में दो लाइनों को खटखटाएं और इसे

[checkinArray addObject:checkinsA]; 
[checkinsA release]; 
+0

checkinsA.taggedID और टैग किए गए नाम चेकइन ए में एनएसएमयूटेबल आरे हैं। इसके अलावा चेकइन्सए लूप के लिए है। – BlackM

+0

(उपयोगकर्ताओं में NSDictionary * उपयोगकर्ता) { चेकइन * चेकइन्सए = [[चेकइन एलोक] init]; checkinsA.taggedName = [[NSMutableArray alloc] init]; checkinsA.taggedID = [[NSMutableArray alloc] init]; ...... [checkinArray addObject: checkinsA]; [checkinsA.taggedID रिलीज]; [checkinsA.taggedName रिलीज]; [चेकइन्स ए रिलीज]; – BlackM

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