2009-12-28 14 views
24

मुझे किसी वस्तु की संपत्ति का स्ट्रिंग नाम पता है। स्ट्रिंग का उपयोग करके उस संपत्ति को प्राप्त करने और सेट करने के बारे में मैं कैसे जाउंगा?संपत्ति के नाम का उपयोग कर गतिशील रूप से पहुंच उद्देश्य-सी संपत्ति

उत्तर

48

जबकि @weichsel सही है, वहाँ एक बेहतर तरीका है।

उपयोग:

[anObject valueForKey: @"propertyName"]; 

और

[anObject setValue:value forKey:@"propertyName"]; 

जाहिर है, @"propertyName" एक NSString जो गतिशील रनटाइम पर बना है हो सकता है।

इस तकनीक को Key Value Coding कहा जाता है और यह कोको के लिए मूलभूत है।

यह बेहतर क्यों है क्योंकि -valueForKey किसी भी वस्तु में संपत्ति लौटने के लिए "बॉक्स" के लिए आवश्यक है। इस प्रकार, यदि संपत्ति int प्रकार है, तो यह int युक्त NSNumber उदाहरण वापस कर देगा।

यह बहुत से निपटने के लिए आसान है - performSelectorहोगा प्रकार है कि हो स्मृति का एक सूचक की कीमत में फिट करने के लिए केवल काम करते हैं।

ध्यान दें कि -setValue:forKey: भी है।

+0

बहुत आसान! उसे नहीं पता था। –

2

@synthesize propertyName गेटर और सेटर विधियों की पीढ़ी को स्वचालित करता है।

संकलक

  • - (id)propertyName;
  • - (void)setPropertyName;

उत्पन्न करता है आप NSString के रूप में एक चयनकर्ता है, तो आप performSelector:NSSelectorFromString उपयोग कर सकते हैं।
उदा .:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

+1

संपत्ति सेट करने के लिए आपको 'performSelector: withObject: 'का उपयोग करना होगा। –

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