2013-10-22 5 views
7

से तत्काल दृश्यों से ज़ोंबी ऑब्जेक्ट्स मुझे एक क्रैश मिला है जो हमारे आवेदन में एक महत्वपूर्ण बिंदु पर होता है। हालांकि, यह क्रैश एक ओवरराइज्ड UIView ऑब्जेक्ट से आ रहा है (अधिक विशेष रूप से UITableView का हेडर व्यू, जो इस मामले में एक UISearch बार है)। इसके बारे में अजीब चीज यह है कि इसे एक निब फ़ाइल से तुरंत चालू किया गया था। यहाँ दुर्घटना ...इंटरफ़ेस बिल्डर

मैं सेटअप मेरे निब फ़ाइल वास्तव में क्या एप्पल ने अपने नमूना परियोजनाओं में से एक में है से मेल नहीं हुआ है।

enter image description here

मैं भी समय NSZombieEnabled और उपकरण का उपयोग कर के साथ इस विश्लेषण करने के लिए लिया है। हालांकि मैं अभी भी सिर या पूंछ नहीं बना सकता क्योंकि यह क्यों हो रहा है। यहाँ रखें/विज्ञप्ति के युग्मित कर रहा है ....

enter image description here

है और स्टैक ट्रेस उजागर जब UIView वस्तु बन जाता है।

enter image description here

इस प्रकार की त्रुटि के सामान्य उदाहरण एक NSError उद्देश्य यह है कि बनाया है और एक autorelease ब्लॉक के भीतर एक बाहर पैरामीटर के लिए निर्दिष्ट किया जाए। हालांकि, मैं UIView के साथ एक ही समस्या को देखने की उम्मीद नहीं करता। न ही मैं अपने कोड में कहीं भी एक ऑटोरेलीज ब्लॉक देखता हूं (मुख्य रन लूप पर एक को सहेजें)। इस समस्या को हल करने के बारे में कोई विचार?

+0

आईएम नहीं यह सुनिश्चित करें कि यह प्रासंगिक है लेकिन क्या यह संभव है कि आप खोज परिणामों को असीमित रूप से सेवा दें? –

+0

@RyanPfeffer को हटाने के बाद प्रतिक्रिया हो सकती है क्या आप डीबगर से सटीक त्रुटि संदेश में पेस्ट करने में सक्षम हैं? मैंने उन मुद्दों को देखा है जहां डेवलपर कोड के साथ स्टोरीबोर्ड संघर्ष से मैनुअल सेग्स को कॉल करना एक ही दृश्य पेश करने का प्रयास करता है। मुझे लगता है कि ऐसा कुछ आपके मामले में हो रहा है। –

+0

@NilsZiehn - मैं वास्तव में परिणामों को असीमित रूप से सेवा दे रहा था। मैं दो चीजें करके समस्या को ठीक करने में सक्षम था: 1. async अद्यतन अधिसूचना के अवलोकन को हटा रहा है 2. एनीमेशन के बिना व्यू कंट्रोलर को बंद करना। हालांकि, मैं इस प्रश्न का उत्तर नहीं मानता क्योंकि मैं वास्तव में नहीं जानता कि यह क्यों हो रहा था। यदि आप इस बारे में स्पष्टीकरण देना चाहते हैं कि यह कैसे टूट सकता है, तो मुझे देय क्रेडिट देने में खुशी होगी। –

उत्तर

1

समस्या यह है कि अधिसूचनाओं को सुनना या केवीओ पर्यवेक्षक जोड़ना पर्यवेक्षण वस्तु के रखरखाव को नहीं बदलता है। और आपके पास देखने/व्यू कंट्रोलर/ऑब्जेक्ट देखने के ठीक बाद एक अधिसूचना निकाल दी गई है।

आप बदल सकता है - (void)dealloc विधि आपके विचार से अधिसूचना/KVO पर्यवेक्षक/ViewController

सूचनाएं निकालने के लिए:

-(void) dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    //if you are not using ARC you also have to write 
    //[super dealloc]; 
} 

KVO अपने मुख्यपथ (रों)

- (void)removeObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath 
साथ विधि का उपयोग करें

चीयर्स, निल्स

0

मैं जानकारी का एक बहुत कुछ नहीं है, लेकिन मुझे कुछ विचारों को साझा करते हैं:

  • KVO एसिंक्रोनस रूप से डेटा प्राप्त करने के लिए एक बुरा पैटर्न है, क्योंकि के रूप में @Niels ने कहा, यह परिवर्तन नहीं करता है बनाए रखने के अवलोकन ऑब्जेक्ट की गिनती
  • सबसे अच्छा प्रतिनिधि प्रतिनिधि के साथ सुरक्षित रूप से खेलने के लिए है जो टेबल व्यू या किसी अन्य दृश्य का मालिक है जिसे डेटा को असीमित रूप से अपडेट किया जाना आवश्यक है।
  • हमेशा प्रतिनिधि नियंत्रकों का ख्याल रखना, इससे पहले कि आप इसे चाहते हैं, उन्हें पहले से ही ऑटोरेलेज्ड होने से रोकें, टीआई, सभी एसिंक्रोनस डेटा प्राप्त होने से पहले, संग्रह गुणों में पॉप किए गए नियंत्रक को जोड़कर, यह सब निर्भर करता है कि आपका ऐप कैसे नेविगेट किया गया है और कैसे क्या आप इसे
  • पर काम करना चाहते हैं, तो आप नियंत्रक प्रतिनिधि को खारिज कर दिया जाता है, तो आप एसिंक्रोनस ट्रांसफर ऑपरेशंस को रद्द करने के लिए UINavigationControllerDelegate का भी उपयोग कर सकते हैं।
संबंधित मुद्दे