Domanda In Objective C, puoi verificare se un oggetto ha una proprietà o un messaggio particolare?


Voglio fare qualcosa del genere:

if (viewController.mapView) [viewController.mapView someMethod];

Tuttavia, se mapView non è una variabile di classe, questo si blocca. Come posso verificare se mapView esiste?


44
2017-10-08 01:44


origine


risposte:


Per i selettori ordinari, puoi usare respondsToSelector:. Non sono sicuro se questo funzionerà per l'accesso alle nuove proprietà (come sembra che tu stia usando in questo esempio). Per verificare se una classe risponde a un determinato selettore, utilizzare instancesRespondToSelector:.


45
2017-10-08 01:49



Inoltre, mentre Jason usciva fuori Qui, puoi anche usare NSSelectorFromString per verificare dinamicamente al runtime. Per esempio.

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

32
2018-04-18 09:50



Oops, trovato:

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

  [[vc mapView] viewWillAppear:YES];

}

30
2017-10-08 01:48



Qui c'è più di quello che hai chiesto, ma una categoria che ho trovato utile per gestire genericamente le proprietà di NSObject:

http://www.whynotsometime.com/Why_Not_Sometime/Category_Enhancing_NSObject.html


0
2018-01-04 20:13