2010-10-21 11 views
10

Wenn ich in objective-c subclassing, wie kann ich einen Aufruf an die Oberklasse im Falle einer variadischen Methode weiterleiten. Mit was soll ich das ??? ersetzen? unten, um alle Objekte zu senden, die ich bekommen habe?Eine variadic Methode in objective-c überschreiben

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

Antwort

7

Sie können nicht. Um alle Variadic-Argumente sicher zu übergeben, benötigen Sie eine Methode, um eine va_list zu akzeptieren.

In super,

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

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

Und [super appendObjectsWithArguments:vl] verwenden, wenn Sie die Methode in der Unterklasse außer Kraft setzen.

0

Try this:

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

Wenn das nicht funktioniert der Trick tun, um die Handbuchseiten auf varargs lesen.

+1

Das wird nicht funktionieren, wird es nur „args“ passieren als ein einzelner Parameter auf appendObjects (und wahrscheinlich einen Fehler in Kauf verursachen). –