मेरे पास "नीति" ऑब्जेक्ट्स की एक श्रृंखला है जिसे मैंने पॉलिसी कक्षाओं के एक सेट पर कक्षा विधियों के रूप में लागू करने के लिए सुविधाजनक होगा। मैं इस के लिए एक प्रोटोकॉल निर्दिष्ट किया है, और (सिर्फ एक नीचे दिखाया गया है)कक्षा के संदर्भ के बिना मैं उद्देश्य सी में + कक्षा विधियों को कैसे कॉल करूं?
@protocol Counter
+(NSInteger) countFor: (Model *)model;
@end
@interface CurrentListCounter : NSObject <Counter>
+(NSInteger) countFor: (Model *)model;
@end
मैं तो कक्षाएं कि इस प्रोटोकॉल के अनुरूप (जैसे CurrentListCounter करता है) की एक सरणी है
+(NSArray *) availableCounters {
return [[[NSArray alloc] initWithObjects: [CurrentListCounter class], [AllListsCounter class], nil] autorelease];
}
के अनुरूप करने के लिए बनाया कक्षाएं
सूचना कैसे मैं वस्तुओं की तरह वर्गों का उपयोग कर रहा है (और यह मेरी समस्या हो सकती है - स्मालटाक कक्षाओं में सभी चीज़ों की तरह वस्तुओं रहे हैं - मुझे यकीन है कि अगर वे ऑब्जेक्टिव-सी में हैं नहीं कर रहा हूँ?)
मेरे सटीक समस्या है जब मैं पीओ में से एक लेता हूं तो मैं विधि को कॉल करना चाहता हूं सरणी से बाहर licy वस्तुओं:
id<Counter> counter = [[MyModel availableCounters] objectAtIndex: self.index];
return [counter countFor: self];
मैं वापसी कथन पर यह चेतावनी मिलती है - यह कहना है -countFor: प्रोटोकॉल में नहीं मिला (ताकि अपने अपने संभालने एक उदाहरण विधि जहां मैं एक वर्ग विधि कॉल करना चाहते हैं)। हालांकि, मेरी सरणी में ऑब्जेक्ट्स कक्षा के उदाहरण हैं, वे अब उदाहरण विधियों की तरह हैं (या अवधारणात्मक रूप से वे होना चाहिए)।
कक्षा विधियों को कॉल करने का कोई जादू तरीका है? या यह सिर्फ एक बुरा विचार है और मुझे सिर्फ अपनी नीति वस्तुओं के उदाहरण बनाना चाहिए (और वर्ग विधियों का उपयोग नहीं करना चाहिए)?
काउंटर –