मुझे किसी वस्तु की संपत्ति का स्ट्रिंग नाम पता है। स्ट्रिंग का उपयोग करके उस संपत्ति को प्राप्त करने और सेट करने के बारे में मैं कैसे जाउंगा?संपत्ति के नाम का उपयोग कर गतिशील रूप से पहुंच उद्देश्य-सी संपत्ति
उत्तर
जबकि @weichsel सही है, वहाँ एक बेहतर तरीका है।
उपयोग:
[anObject valueForKey: @"propertyName"];
और
[anObject setValue:value forKey:@"propertyName"];
जाहिर है, @"propertyName"
एक NSString
जो गतिशील रनटाइम पर बना है हो सकता है।
इस तकनीक को Key Value Coding कहा जाता है और यह कोको के लिए मूलभूत है।
यह बेहतर क्यों है क्योंकि -valueForKey
किसी भी वस्तु में संपत्ति लौटने के लिए "बॉक्स" के लिए आवश्यक है। इस प्रकार, यदि संपत्ति int
प्रकार है, तो यह int युक्त NSNumber
उदाहरण वापस कर देगा।
यह बहुत से निपटने के लिए आसान है - performSelector
होगा प्रकार है कि हो स्मृति का एक सूचक की कीमत में फिट करने के लिए केवल काम करते हैं।
ध्यान दें कि -setValue:forKey:
भी है।
@synthesize propertyName
गेटर और सेटर विधियों की पीढ़ी को स्वचालित करता है।
संकलक
- (id)propertyName;
- (void)setPropertyName;
उत्पन्न करता है आप NSString के रूप में एक चयनकर्ता है, तो आप performSelector:NSSelectorFromString
उपयोग कर सकते हैं।
उदा .:
[object performSelector:NSSelectorFromString(@"propertyName") ...]
संपत्ति सेट करने के लिए आपको 'performSelector: withObject: 'का उपयोग करना होगा। –
बहुत आसान! उसे नहीं पता था। –