2012-03-05 36 views
5

मैं एक वर्ग के रूप में एक variadic विधि है कि विस्तार करने के लिए कोशिश कर रहा हूँ में एक variadic विधि ओवरराइड करने के लिए कैसे:ऑब्जेक्टिव-सी

- (void)someMethod:(id)arguments, ... ; 

और उपवर्ग में की तरह मूल विधि को फोन करके उसे ओवरराइड:

- (void)someMethod:(id)arguments, ... { 
    [super someMethod:arguments, ...]; 

    // override implementation 
    ... 
} 

लेकिन यह काम नहीं करता है। किसी को पता है कि यह कैसे काम करें? धन्यवाद।

+0

तो ... क्या यह एक श्रेणी है, या एक सुपरक्लास? क्योंकि श्रेणियां अधिक होती हैं और ओवरक्लेस सुपरक्लास। – CodaFi

+0

उप-वर्ग में ओवरराइड करें। –

+0

आम तौर पर एक भिन्न कार्य या इस तरह की विधि को लपेटना संभव नहीं है। –

उत्तर

3

printf/vprintf के समान है, आधार घोषणा करेंगे:

- (void)someMethod:(id)arguments, ... ; 

उपवर्ग लागू करना होगा:

- (void)vsomeMethod:(id)arguments vaList:(va_list)vaList; 

तो आधार सिर्फ someMethod:vaList: की इसके कार्यान्वयन में vsomeMethod:vaList: कहेंगे।

+0

धन्यवाद, लेकिन मेरे मामले में बेस क्लास को संशोधित नहीं किया जा सकता है। –

+2

@TaketoSano यह एक वैरैडिक फ़ंक्शन को लागू करने जैसा ही होगा, लेकिन आप 'va_list' को' vsomeMethod: vaList: 'बनाने के बाद, तर्कों की गणना करने के बजाए इसे आगे बढ़ाएंगे। चूंकि आप आधार को संशोधित नहीं कर सकते हैं, यह दृष्टिकोण आपके लिए काम नहीं करेगा क्योंकि 'कुछ विधि:' को सही तरीके से आगे बढ़ने के लिए आधार द्वारा परिभाषित किया जाना चाहिए। केवल शेष 'वर्कअराउंड' जिन्हें मैं जानता हूं कार्यान्वयन-परिभाषित हैं। – justin

+0

ठीक है, आपके उत्तर के लिए धन्यवाद। –