2011-02-10 7 views
12

पर भेजा गया संदेश मैं एक बहुत ही अजीब मुद्दे से फंस गया हूं। मुझे आशा है कि आप में से कई मुझे इसे हल करने के लिए इनपुट प्रदान कर सकते हैं। मेरा एप्लिकेशन अक्सर टूटता है, लेकिन मैं सटीक परिदृश्य प्राप्त करने में सक्षम नहीं हूं।रेग: संशोधित परत को संशोधित किया जा रहा है ....... [कैलियर फ्रेम]: संदेश को हटाए गए संदेश 0xe43c520

प्रवेश करें मैं निम्नलिखित

2011-02-10 16:22:12.914 RCA-iOS[4132:8327] modifying layer that is being finalized - 0xe43c520 
2011-02-10 16:22:13.253 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520 
2011-02-10 16:22:13.270 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520 
2011-02-10 16:22:13.270 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520 
2011-02-10 16:22:13.272 RCA-iOS[4132:207] *** -[CALayer frame]: message sent to deallocated instance 0xe43c520 

के बाद मिलता है मेरी स्टैक ट्रेस है। यह मुख्य धागे

#0 0x01978057 in ___forwarding___ 
#1 0x01a07b42 in __forwarding_prep_1___ 
#2 0x003c196a in -[UIView(Geometry) frame] 
#3 0x003f5ff4 in -[UINavigationBar _getTitleViewFrame:leftViewFrame:rightViewFrame:forViews:forItemAtIndex:] 
#4 0x003e5cab in -[UINavigationBar _getTitleViewFrame:leftViewFrame:rightViewFrame:forViews:] 
#5 0x003f0c06 in __-[UINavigationBar layoutSubviews]_block_invoke_1 
#6 0x003bdb5c in +[UIView(Animation) _performWithoutAnimation:] 
#7 0x003f76bb in -[UINavigationBar layoutSubviews] 
#8 0x00f59451 in -[CALayer layoutSublayers] 
#9 0x00f5917c in CALayerLayoutIfNeeded 
#10 0x00f5237c in CA::Context::commit_transaction 
#11 0x00f520d0 in CA::Transaction::commit 
#12 0x00f827d5 in CA::Transaction::observer_callback 
#13 0x019e7fbb in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 
#14 0x0197d0e7 in __CFRunLoopDoObservers 
#15 0x01945bd7 in __CFRunLoopRun 
#16 0x01945240 in CFRunLoopRunSpecific 
#17 0x01945161 in CFRunLoopRunInMode 
#18 0x02129268 in GSEventRunModal 
#19 0x0212932d in GSEventRun 
#20 0x0039e42e in UIApplicationMain 
#21 0x00001fd0 in main at main.m:14 

और NSZombie ऑब्जेक्ट के लिए उपकरण का आउटपुट निम्नलिखित है। यह यूआईकिट

# Category Event Type RefCt Timestamp Address Size Responsible Library Responsible Caller 
0 CALayer Malloc 1 25304068864 0x10837840 48 UIKit -[UIView _createLayerWithFrame:] 
1 CALayer Zombie -1 99780847872 0x10837840 0 UIKit -[UIView(Geometry) frame] 

कोड को इंगित करने के लिए कुछ भी इंगित करता है। क्या किसी को इस तरह का मुद्दा सामना करना पड़ा है? यदि हां कृपया मुझे
1) जब हमें "संशोधित परत को अंतिम रूप दिया जा रहा है" तोड़ने के बाद मुझे बताएं?
2) UIView की परत के कारण है? उदाहरण के लिए (view.layer.cornerRadius)?
3) यूआईएनएविगेशनबार को ट्रेस पॉइंट्स स्टैक करें, क्या तरीकों को ओवरराइड करने और कुछ चीज़ों को आजमाने का कोई तरीका है?

किसी भी मदद की सराहना की जाती है। धन्यवाद

उत्तर

40

त्रुटि "modifying layer that is being finalized" तब होती है जब आप किसी कैलियर के गुणों को संशोधित करने की कोशिश कर रहे होते हैं, जब यह अस्वीकृत होने की प्रक्रिया में होता है। मैंने यह देखा है जब मैंने गलती से एक कैलियर पर एक संपत्ति को साफ़ करने के लिए एक्सेसर का उपयोग किया है जबकि उस परत के -dealloc विधि के भीतर।

यह यूआईवीवी के -dealloc विधि के भीतर भी हो सकता है यदि कुछ डिस्प्ले-संबंधित अपडेट किया गया है (इस प्रकार अंतर्निहित कैलियर को छू रहा है)।

आपके मामले में, ऐसा लगता है कि ज़ोंबी संदेश के कारण, आप कहीं कहीं UIView को ओवरराइज़ कर रहे हैं। "modifying layer that is being finalized" इसका एक दुष्प्रभाव है, क्योंकि किसी बिंदु पर आप UIView को अपडेट कर रहे होंगे, जबकि इसे पहले से हटाया जा रहा है।

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

क्योंकि आपके पास पहले से ही UINavigationBar को इंगित करने वाले सबूत हैं, यह सुनिश्चित करने के लिए कि आप इसे ठीक से बनाए रखते हैं, इसे और इसके संबंधित दृश्यों की जांच करें।

+0

उत्तर के लिए धन्यवाद ब्रैड। मुझे यह समस्या यादृच्छिक समय पर 30 बार एक बार मिल रही है। फिर भी मैं इसे ठीक करने में सक्षम नहीं हूं क्योंकि मेरे लिए बग के परिदृश्य को पुन: उत्पन्न करना बहुत मुश्किल हो गया है। क्या थ्रेडिंग एक मुद्दा हो सकता है, क्योंकि मैं एप्लिकेशन में बहुत सारे एसिंक थ्रेड का उपयोग कर रहा हूं? – D25

+0

@ मेगामाइंड - हां, थ्रेडिंग इस तरह की समस्याओं का एक बहुत अच्छा स्रोत हो सकता है। सुनिश्चित करें कि आप किसी भी चीज़ पर उपयोगकर्ता इंटरफ़ेस तत्वों को अपडेट नहीं कर रहे हैं, लेकिन मुख्य थ्रेड, या यहां तक ​​कि उन क्रियाओं को भी उत्पन्न कर रहे हैं जो अप्रत्यक्ष रूप से पृष्ठभूमि थ्रेड पर उपयोगकर्ता इंटरफ़ेस में संशोधन का कारण बन सकते हैं। साथ ही, धागे में स्मृति प्रबंधन के साथ बहुत सावधान रहें, क्योंकि संभावना है कि आप गलती से गलत समय पर कुछ जारी कर रहे हैं। –

+0

यूप एक थ्रेडिंग मुद्दा था। – D25

0

@ मेगामाइंड- मैं इस मुद्दे के साथ भी फंस गया था "संशोधित परत को अंतिम रूप दिया जा रहा है" जिससे ऐप छोड़ दिया गया लेकिन मैं इस मुद्दे को हल करने में सक्षम हूं। मुझे लगता है कि आप किसी ऑब्जेक्ट को जारी कर रहे हैं जिसे UIView दिखाई देने पर बुलाया जा रहा है।

0

मुझे यह त्रुटि मिली जब मैंने उस ऑब्जेक्ट को रिलीज़ किया जिस पर कभी भी इसे आवंटित नहीं किया गया था, तो यह हो सकता है।

0

नोब (मेरी तरह) की मदद करने के लिए जो अपने mem के साथ कुछ भी गलत नहीं देख सकते हैं।एमजीएमटी,

मुझे यह त्रुटि भी मिली क्योंकि मैंने गलत तरीके से आईबीओलेट संपत्ति पर 'असाइन' का उपयोग किया था, जिसे उस पर 'बनाए रखना' माना जाता था। जब आप कॉपी-पेस्ट करते हैं तो सावधान रहें!

2

मुझे यह त्रुटि मिली जब गलती से उस ऑब्जेक्ट को रिलीज़ करने का प्रयास किया गया जिसे रिलीज़ नहीं किया जाना चाहिए था, इसे UIView एनीमेशन ब्लॉक के लिए उपयोग करने के साथ। फिक्सिंग जिसने समस्या को दूर कर दिया।

0

जब मैंने UIButton पर क्लिक किया तो यह त्रुटि मिली। मजाकिया बात यूआईबटन के साथ कुछ भी गलत नहीं थी, लेकिन वास्तव में बटन के नीचे सबव्यू में से एक पर। मुझे एक सबव्यू मिला जो उस पर अतिरिक्त रिलीज था।

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

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