2012-02-24 8 views
8

मैं कोड में यह परिभाषित किया है:स्टोरीबोर्ड से स्थैतिक कोशिकाओं को इंगित करने वाला आईबीओलेटलेट चयन क्यों शून्य हो रहा है?

@property (nonatomic, weak) IBOutletCollection(UITableViewCell) NSSet * certaintyCells; 

और संश्लेषित। मैंने पूरी तरह से सुनिश्चित किया कि इस नियंत्रक का उपयोग कहानी बोर्ड में किया जाता है, और इस संग्रह में तीन कोशिकाओं को जोड़ा जाता है।

इसके बाद, didSelectRowAtIndexPath: विधि कॉल में, मैं इस कोड जोड़ा, NSLog के साथ डिबगिंग के लिए कहा:

Certainty Cells: (null) 

और निश्चित रूप से, अपेक्षित व्यवहार नहीं करता है:

 NSLog(@"Certainty Cells: %@",certaintyCells); 
     for (UITableViewCell * cell in certaintyCells) { 
      [cell.textLabel setTextColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1]]; 
      [cell setSelectionStyle:UITableViewCellSelectionStyleBlue]; 
     } 

उत्पादन यह है होता है।

ऐसा कोई विचार क्यों है कि यह क्यों हो रहा है? मैंने यह सुनिश्चित किया है कि मैं स्थैतिक कोशिकाओं का उपयोग कर रहा हूं, न कि गतिशील प्रोटोटाइप। एक साइड नोट के रूप में, ये तीन कोशिकाएं स्वयं (आईबीओलेट्स) से जुड़ी हैं।

धन्यवाद,

उत्तर

33

मैं परिवर्तन उस समय मेरे लिए कोई मतलब नहीं था बनाने के द्वारा इस सवाल का जवाब मिल गया। मैंने संपत्ति को weak से strong में बदल दिया, और यह काम किया।

क्यों मैं (कमजोर) पहले स्थान पर था:

क्योंकि मैं यदि दृश्य स्मृति चेतावनी/आदि की वजह से अनलोड करने के लिए फैसला किया है पुनः आवंटित की जाती किए जाने से कुछ रखने के लिए नहीं चाहता था।

क्यों इस सोच गलत था:

क्योंकि एक IBOutletCollection NSSet या NSArray का एक उदाहरण है। कि NSSet/NSArray दृश्य द्वारा बनाए रखा नहीं है, क्योंकि यह स्वयं एक सबव्यू नहीं है। आईबीओलेट के साथ एक कमजोर संपत्ति ठीक है, आईबीओलेटलेट चयन के साथ एक मजबूत संपत्ति की आवश्यकता होती है, अन्यथा संदर्भ संख्या तुरंत शून्य होती है और इसे हटा दिया जाता है।

मैं इसे उम्मीद में छोड़ रहा हूं कि यह किसी और की मदद करता है।

+0

वही सोचा, सेब दस्तावेज़ में जवाब नहीं मिला। इसे मजबूत करने के लिए बदल दिया, यह अब काम करता है। मुझे आश्चर्य है कि क्या यह डेलोक-एड मिलेगा .. कोई भी? – Oritm

+0

दृश्य नियंत्रक deallocs जब इसे स्वचालित रूप से dealloc करना चाहिए, आप इसे देखने के लिए सेट कर सकते हैं DidUnload अगर आप इसे वहां हटाना चाहते हैं। –

3

मैं कहूंगा कि (शून्य) मान फ्रीिंग ऑब्जेक्ट का परिणाम है क्योंकि एआरसी ने अनुमान लगाया है कि ऑब्जेक्ट किसी से संदर्भित नहीं है और कुछ बिंदु पर इसे शून्य से अधिक मूल्य निर्धारित करता है।

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