2009-10-08 8 views

Antwort

44

Für gewöhnliche Selektoren können Sie respondsToSelector: verwenden. Ich bin mir nicht sicher, ob dies für den neuen Objektzugriff funktioniert (wie es in diesem Beispiel aussieht). Um zu testen, ob eine Klasse auf einen bestimmten Selektor reagiert, verwenden Sie instancesRespondToSelector:.

+4

Der Eigenschaften-Getter ist eine Methode mit einem Namen, der der Eigenschaft und keinen Argumenten entspricht (d. H. Kein abschließender Doppelpunkt in der Signatur). –

+2

Wow, Objective-C ist nicht eins zu sein, oder? – devios1

+1

@chaiguy: Objective-C ist so kurz wie möglich. Hier ist der Beweis: [Längste Objective-C-Methode] (http://stackoverflow.com/a/15152232/2783780). – JVillella

30

Hoppla, fand es:

if ([vc respondsToSelector:@selector(mapView)]) { 

    [[vc mapView] viewWillAppear:YES]; 

} 
+2

Sie auch auf synthetisierte Eigenschaftsmethoden wie 'setMapView verwenden können:' –

+1

oder jede Eigenschaft mit einem Accessor und Setter. @property & @synthesize erledigt die meiste Arbeit für Sie in den meisten Fällen. Worüber ich nicht sicher bin ist, ob der Getter nicht Standard ist, zum Beispiel @property (getter = notStandardGetter) NSString * aString; – pxl

32

Auch, wie Jason here herausfand, können Sie auch NSSelectorFromString verwenden, um zur Laufzeit dynamisch zu überprüfen. Z.B.

if ([self respondsToSelector:NSSelectorFromString(elementName)]) 
{ 
    [self setValue:elementInnerText forKey:elementName]; 
} 
+0

Ich glaube nicht, dass dies so funktioniert, wie Sie es vorhaben ... Wie in der NSSelectorFromString-Dokumentation angegeben: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/ Referenz/reference.html # // apple_ref/c/func/NSSelectorFromString "Beachten Sie, dass, wenn der Selektor nicht existiert, er registriert wird und der neu registrierte Selektor zurückgegeben wird." Daher wird diese "if" Prüfung immer als wahr ausgewertet. – Stunner

+4

@Stunner - Könnte missverstanden haben, aber die Dokumente scheinen darauf hinzuweisen, dass 'NSSelectorFromString' immer ein SEL zurückgibt, egal ob es implementiert ist. Dies ist kein Problem, da 'antwortetToSelector:' ist die tatsächliche Überprüfung, die wir interessiert sind. – Robert

+0

Ah ich sehe, macht Sinn, danke für die Klarstellung. – Stunner

Verwandte Themen