2010-06-08 3 views
1

En this question, quelqu'un a demandé comment écrire une méthode de validation pour les données de base. Je l'ai fait, et ça a l'air cool. Mais une chose n'arrive pas: la validation. Je peux facilement définir n'importe quelle "mauvaise" valeur et cette méthode n'est pas appelée automatiquement. Quel est le concept derrière tout cela? Dois-je toujours d'abord appeler la méthode de validation avant de définir une valeur? Alors, est-ce que j'écrirais des méthodes setter qui appellent la méthode de validation appropriée en premier?Est-ce que Core Data valide automatiquement les nouvelles valeurs lorsqu'elles sont définies?

Et si oui, quel est le point de suivre une convention stricte dans la façon d'écrire la signature de la méthode de validation? Je suppose qu'il y a aussi un moyen de validation automatique, alors. Comment l'activer?

Répondre

3

La validation n'est pas "automatique", surtout sur iOS. Sur le bureau, vous aurez les éléments de l'interface utilisateur gérant l'appel à la validation. Sur iOS, vous devriez appeler validateValue:forKey:error: avec la clé appropriée et traiter l'erreur s'il y en a une. La raison en est l'absence d'un affichage d'erreur standard sur iOS et la surcharge de la validation de toutes les valeurs.

Notez ce commentaire dans la documentation:

If you do implement custom validation methods, you should typically not invoke them directly. Instead you should call validateValue:forKey:error: with the appropriate key. This ensures that any constraints defined in the managed object model are also applied.

+0

En effet je trouve le travail assez difficile à faire dans la validation des données de base sur l'iPhone. C'est assez fastidieux d'écrire tout ce code, surtout avec la localisation. C'est un bon exemple pour un bon wrapper de Core Data, peut-être :) – dontWatchMyProfile

+0

Je sais que c'est un vieux post, mais je pense qu'il vaut la peine d'ajouter: ces méthodes sont automatiquement appelées lorsque vous essayez d'enregistrer un objet géré, et l'erreur L'ensemble est également ramené à l'appelant via le mécanisme de gestion des erreurs documenté. De plus, il ne serait pas judicieux que le CD appelle des méthodes de validation lorsque vous définissez des propriétés, puisque les setters sont des méthodes void qui ne prennent pas de référence NSError pour un paramètre. Cela étant dit, je vous accorde que si vous voulez valider les entrées dans l'interface graphique sans sauvegarder, alors il est tout à fait logique d'appeler validateValue: forKey: error. –

Questions connexes