2016-06-27 13 views
9

मेरे पास मेरे ऐप में IBOutlet NSLayoutConstraint है। बहुत ही सरल:क्यों कमजोर आईबीओयूलेट NSLayoutConstraint जब मैं इसे निष्क्रिय करता हूं तो शून्य हो जाता है?

@property (nonatomic, weak) IBOutlet NSLayoutConstraint* leftConstraint; 

कुछ बिंदु पर मैं इस बाधा को निष्क्रिय करना चाहते:

self.leftConstraint.active = NO; 

यह एक विधि cellForRowAtIndexPath: से कहा जाता है में होता है। और ऊपर की रेखा के बाद बाधा ठीक हो जाती है। हालांकि अगर मैं इस संपत्ति को strong के रूप में घोषित करता हूं तो यह ठीक है, यह शून्य पर नहीं आता है। क्या कोई समझा सकता है कि ऐसा क्यों होता है?

उत्तर

28

जब आपका आउटलेट weak है, तो केवल strong संदर्भ दृश्य की constraints संपत्ति से है। बाधा को निष्क्रिय करना इसे उस सरणी से हटा देता है, इसलिए कोई और मजबूत संदर्भ नहीं हैं।

+0

प्राथमिक, वाटसन))) बहुत बहुत धन्यवाद! –

+0

एक ही निष्कर्ष मैं पहुंचा, लेकिन क्या यह मजबूत बनाने के लिए सुरक्षित है? मेरी बाधा एक संग्रह दृश्य कक्ष में है और मुझे चिंता है कि मजबूत रेफरी रखने से कोशिकाओं का पुनर्नवीनीकरण होने पर एक बनाए रखा चक्र बन जाएगा। – Echelon

+0

@ एशेलॉन, जिसका उत्तर आपके वर्ग संबंधों के बारे में और जानने के बिना नहीं किया जा सकता है। हालांकि, चक्र तब तक ठीक हैं जब तक एक स्पष्ट बिंदु है जहां वे टूट जाते हैं। – Avi

2

एक संभावित समाधान, बजाय इसे निष्क्रिय बनाने का बाधा प्राथमिकता बदलने के लिए होगा:

@property (nonatomic, weak) IBOutlet NSLayoutConstraint* leftConstraint; 
(...) 
self.leftConstraint.priority = 250; 

फिर, self.leftConstraint निपटारा नहीं है।

संपादित करें:

Xcode आवश्यक (= 1000) की कमी के लिए प्राथमिकता को बदलने का समर्थन नहीं करता है, तो सुनिश्चित करें कि आप के बीच 1 ... 999 एक श्रेणी में स्विच हो।

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

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