Il y a un modèle standard de validation à Cocoa, y compris Cocoa Touch, appelé Key-Value Validation que vous devriez se conformer à si vous voulez valider l'entrée d'utilisateur autre que par un NSFormatter.
En substance, une propriété name
que vous voulez validé, vous implémentez une méthode suivant ce modèle:
- (BOOL)validateName:(id *)ioValue error:(NSError **)error;
Ensuite, lorsque vous souhaitez valider une propriété avant de partir de votre interface utilisateur, vous utilisez juste :
NSString *proposedName = [[nameField.stringValue copy] autorelease];
NSError *nameError;
if ([person validateValue:&proposedName forKey:@"name" error:&nameError]) {
person.name = proposedName;
} else {
// present nameError to the user in a reasonable way
}
Notez que vous ne pas invoquer la méthode -validateValue:forKey:error:
ou -validateName:error:
dans votre méthode -setName:
. Au lieu de cela, vous appelez votre méthode -setName:
(comme je le fais via la syntaxe de point ci-dessus) une fois que vous connaissez la valeur que vous passez pour qu'elle soit valide. De plus, lisez le document sur la validation de valeur-clé que j'ai mentionné ci-dessus pour comprendre pourquoi proposedName
est une copie auto-libérée de la valeur de chaîne d'un champ, au lieu de simplement sa valeur de chaîne. Si vous implémentez quelque chose de plus compliqué que la validation par propriété, comme la validation d'objet entier ou même la validation de graphique d'objet, assurez-vous de voir comment le framework Core Data sur Mac OS X le gère.