2010-10-21 8 views
10

में एक वैरिएडिक विधि को ओवरराइड करना जब उद्देश्य-सी में उप-वर्गीकरण, मैं एक वैरिएडिक विधि के मामले में सुपरक्लास को कॉल कैसे अग्रेषित कर सकता हूं। मुझे किस जगह से बदलना चाहिए ??? मुझे मिली सभी वस्तुओं को भेजने के लिए नीचे?उद्देश्य-सी

- (void) appendObjects:(id) firstObject, ... 
{ 
    [super appendObjects: ???]; 
} 

उत्तर

7

आप नहीं कर सकते। सभी विविध तर्कों को सुरक्षित रूप से पास करने के लिए, आपको va_list स्वीकार करने के लिए एक विधि की आवश्यकता है।

सुपर में,

-(void)appendObjectsWithArguments:(va_list)vl { 
    ... 
} 

-(void)appendObject:(id)firstObject, ... 
    va_list vl; 
    va_start(vl, firstObject); 
    [self appendObjectsWithArguments:vl]; 
    va_end(vl); 
} 

और [super appendObjectsWithArguments:vl] का उपयोग करके ऐसी उपवर्ग में विधि ओवरराइड।

0

इस प्रयास करें:

- (void) appendObjects:(id) firstObject, ... 
{ 
    va_list args = &firstObject; 
    [super appendObjects: args]; 
} 

कि चाल नहीं करता है, तो varargs पर मैनुअल पृष्ठों पढ़ें।

+1

में इस पर एक अच्छा लेख से काम नहीं चलेगा कि, यह सिर्फ "आर्ग" पारित करेंगे नहीं है appendObjects के लिए एक एकल पैरामीटर के रूप में (और शायद सौदा में एक गलती के कारण)। –