2009-10-08 20 views

Respuesta

44

Para selectores ordinarios, puede utilizar respondsToSelector:. No estoy seguro de si esto funcionará para el acceso a la propiedad de estilo nuevo (como parece que está usando en este ejemplo). Para probar si una clase responde a un selector dado, use instancesRespondToSelector:.

+4

Property getter es un método con un nombre que coincide con la propiedad y sin argumentos (es decir, sin puntos finales en la firma). –

+2

Wow, Objective-C no es conciso, ¿verdad? – devios1

+1

@chaiguy: Objective-C es lo más conciso posible. Aquí hay una prueba: [Método más largo de Objective-C] (http://stackoverflow.com/a/15152232/2783780). – JVillella

30

Vaya, lo encontraron:

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

    [[vc mapView] viewWillAppear:YES]; 

} 
+2

También se puede utilizar en los métodos de propiedad sintetizados como 'setMapView:' –

+1

o cualquier propiedad con un descriptor y un descriptor de acceso. @property & @synthesize hace la mayor parte del trabajo para usted en la mayoría de los casos. De lo que no estoy seguro es de si su getter no es estándar, por ejemplo @property (getter = notStandardGetter) NSString * aString; – pxl

32

Además, como Jason señaló here, también puede usar NSSelectorFromString para comprobar dinámicamente en tiempo de ejecución. P.ej.

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

No creo que esto funcione como lo desea ... Como se indica en los documentos de NSSelectorFromString: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/ Reference/reference.html # // apple_ref/c/func/NSSelectorFromString "Tenga en cuenta, por lo tanto, que si el selector no existe, se registra y se devuelve el selector recién registrado." Por lo tanto, esta verificación 'if' siempre se evaluará como verdadera. – Stunner

+4

@Stunner - Puede haber entendido mal, pero los documentos parecen sugerir que 'NSSelectorFromString' siempre devuelve un SEL sin importar si está implementado. Esto no es un problema ya que 'respondsToSelector:' hace la comprobación real en la que estamos interesados. – Robert

+0

Ah, veo, tiene sentido, gracias por la aclaración. – Stunner

Cuestiones relacionadas