2010-03-22 15 views
20

मेरे पास एक एमवीसी एप्लीकेशन है। मॉडल में ऐसी संपत्ति है जो एक संरचना NSSize है। यह इस तरह से लिखने योग्य है:NSValue इसका जादू कैसे करता है?

- (void)setSize:(NSSize)aSize; 

दृश्य सेट इस NSSize कुंजी-मान-कोडिंग के प्रयोग से। हालांकि, अगर आप नहीं की-वैल्यू-कोड एक struct कर सकते हैं, तो मैं एक NSValue -object इस तरह में लपेटा:

[theView setValue:[NSValue valueWithSize:mySize] 
      forKey:@"theModel.size"]; 

मेरी समझ के लिए, इस के बाद से एक्सेसर एक struct अपेक्षा करता है और नहीं एक NSValue काम नहीं करना चाहिए । लेकिन यह पूरी तरह से काम करता है। जादुई ढंग से।

यह कैसे संभव है?

+1

+1 यह एक अच्छा सवाल है, क्योंकि कुंजी-मूल्य कोडिंग कोको फ्रेमवर्क के बारे में वास्तव में * कमाल * चीजों में से एक है। इसके अलावा, "जादू" टैग के लिए +1! –

उत्तर

12

"Wrapping and Unwrapping Structs" तक नीचे स्क्रॉल, लेकिन यहाँ सार है:

setValue:forKey: उचित एक्सेसर या निर्दिष्ट कुंजी के लिए उदाहरण चर के लिए आवश्यक डेटा प्रकार निर्धारित करता है। यदि डेटा प्रकार कोई ऑब्जेक्ट नहीं है, तो उपयुक्त -<type>Value विधि का उपयोग करके पास ऑब्जेक्ट से मान निकाला जाता है।

बीटीडब्ल्यू, इस सवाल पूछने के लिए धन्यवाद! यह उन कोको चीजों में से एक है जिसने हमेशा "काम किया" है और मैंने कभी नहीं सोचा था कि यह स्पष्ट नहीं था कि यह कैसे पूरा हुआ।

+0

आपका स्वागत है। स्पष्ट रूप से, यह अचानक मुझे उड़ा दिया जब यह अचानक "बस काम किया"। – bastibe

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