2010-10-08 15 views
7

¿La codificación de valor-clave del iPhone tiene una forma de comprobar si una clase aceptará una clave determinada?Codificación de valor-clave de iPhone - prueba de existencia de la clave

es decir, sin la aplicación de la valueForUndefinedKey: o setValue: forUndefinedKey: método de la clase de destino, quiero ser capaz de hacer algo como esto:

aplicación
if ([targetObject knowsAboutKey: key]) { 
    [targetObject setValue: value forKey: key]; 
} 

Respuesta

3

El valor por defecto de setValue: forUndefinedKey: aumentos una NSUndefinedKeyException. Podría rodear el intento en un bloque try/catch:

@try{ 
    [targetObject setValue:value forKey:key]; 
} @catch (NSException *e) { 
    if ([[e name] isEqualToString:NSUndefinedKeyException]) { 
    NSLog(@"oh well... handle the case where it has no key here."); // handle 
    } else { 
     [[NSException exceptionWithName:[e name] 
           reason:[e reason] 
           userInfo:[e userInfo]] 
     raise]; 
    } 
} 
+3

En realidad, NSUndefinedKeyException no es una clase, sino solo una cadena. Entonces, para hacer lo correcto, uso '@catch (NSException * e) { if ([[e name] isEqualToString: NSUndefinedKeyException]) { \t \t; // manejar \t \t} \t \t else { [[NSException exceptionWithName: [nombre e] razón: [t razón] userInfo: [e userInfo]] elevar]; } } ' – mrueg

+0

¿Alguna idea de cómo atrapar esta excepción en Swift? – devios1

Cuestiones relacionadas