2010-10-08 15 views
7

Le code-clé de l'iPhone permet-il de tester si une classe accepte une clé donnée?Codage clé-valeur iPhone - test de l'existence de la clé

qui est, sans mise en œuvre du valueForUndefinedKey: ou setValue: forUndefinedKey: méthode de la classe cible, je veux être en mesure de faire quelque chose comme ceci:

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

Répondre

3

L'implémentation par défaut de setValue: forUndefinedKey: relances une exception NSUndefinedKeyException. Vous pouvez entourer la tentative dans un bloc 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 fait, NSUndefinedKeyException n'est pas une classe, mais juste une chaîne. Donc, pour faire la bonne chose, j'utilise '@catch (NSException * e) { si ([[e name] isEqualToString: NSUndefinedKeyException]) { \t \t; // gérer \t \t} \t \t else { [[NSException exceptionWithName: [nom de e] raison: [e raison] userInfo: [e userInfo]] augmenter]; } } ' – mrueg

+0

Une idée de comment attraper cette exception dans Swift ?? – devios1