मैं ऑब्जेक्ट फैक्ट्री पर ऑब्जेक्ट्स के छोटे संग्रह का ट्रैक रखने के लिए काम कर रहा हूं। ऑब्जेक्ट्स विभिन्न प्रकार के हो सकते हैं, लेकिन वे सभी createInstance
और reset
का जवाब देंगे। ऑब्जेक्ट्स को सामान्य बेस क्लास से नहीं लिया जा सकता है क्योंकि उनमें से कुछ को NSView
और NSWindowController
जैसे अंतर्निर्मित कोको कक्षाओं से प्राप्त करना होगा।कोको में ऑब्जेक्ट फैक्ट्री के लिए एक क्लास नाम को तर्क के रूप में कैसे पास किया जा सकता है?
मैं इस प्रकार है बस मेरे कारखाने के लिए वांछित classname पास करके किसी भी उपयुक्त वस्तु का उदाहरण बना करने में सक्षम होना चाहते हैं:
myClass * variable = [factory makeObjectOfClass:myClass];
makeObjectOfClass:
विधि कुछ इस तरह दिखेगा:
- (id)makeObjectOfClass:(CLASSNAME)className
{
assert([className instancesRespondToSelector:@selector(reset)]);
id newInstance = [className createInstance];
[managedObjects addObject:newInstance];
return newInstance;
}
क्या किसी विधि को कक्षा नाम पास करने का कोई तरीका है, जैसा कि मैंने तर्क makeObjectOfClass:
से ऊपर किया है?
पूर्णता के लिए, यही कारण है कि मैं सभी वस्तुओं का प्रबंधन करना चाहता हूं। मैं [factory reset];
पर कॉल करके, एक शॉट में ऑब्जेक्ट्स के पूर्ण सेट को रीसेट करने में सक्षम होना चाहता हूं।
- (id)makeObjectOfClassNamed:(NSString *)className
{
Class klass = NSClassFromString(className);
assert([klass instancesRespondToSelector:@selector(reset)]);
id newInstance = [klass createInstance];
[managedObjects addObject:newInstance];
return newInstance;
}
यह +createInstance
नाम के एक वर्ग विधि ग्रहण करेंगे:
- (void)reset
{
[managedObjects makeObjectsPerformSelector:@selector(reset)];
}
मैं माइकल साई की और मैट Gallagher के जवाब के बीच फंसे रहा हूँ है। मैंने दोनों को उखाड़ फेंक दिया, क्योंकि दोनों 'कक्षा' के उपयोग का जिक्र करते हैं, जो मैं खोज रहा था। अंत में, मैंने मैट का जवाब चुना क्योंकि यह क्लासफ्रॉमस्ट्रिंग पर 'कक्षा' पर जोर देता है, और संपादन से पहले 'कक्षा' के उपयोग का उल्लेख करने वाला पहला व्यक्ति था। –
@Ned Batchelder: टैग बदलने के लिए धन्यवाद। कुछ कारणों से, 'objectivec' टैग के ड्रॉप-डाउन सूची में 'ऑब्जेक्ट-सी' की तुलना में कई और आइटम (लगभग 200) दिखाता है जो तब दिखाई देता है जब मैंने प्रश्न में टैग जोड़े, लेकिन अब मैं देखता हूं कि 'objectivec' को रीडायरेक्ट किया गया है 'उद्देश्य-सी' –
@eJames: आपका प्रश्न दिखाता है -सेट क्लास ऑब्जेक्ट नहीं, उदाहरणों पर भेजा जा रहा है, इसलिए मुझे लगता है कि मैट गैलाघर के जवाब में [aClass प्रतिसाद देता है: चयनकर्ता: @ चयनकर्ता (रीसेट)] गलत है। –