samedi 10 mars 2012

Eh bien, c'est embarrassant ...

Dans l'application de SuperDB Plus l'iPhone 3 de développement, Quand nous avons ajouté multi-attributs de validation, par inadvertance, nous arrêté de validation de champ unique sur la date de naissance de cesser de travailler. Dans Hero.m, Nous avons ceci à la fin:

...
- (BOOL)validateForInsert:(NSError **)outError {
return [self validateNameOrSecretIdentity:outError];
}

- (BOOL) validateForUpdate:(NSError **)outError {
return [self validateNameOrSecretIdentity:outError];
}

@end

La méthode de validateNameOrSecretIdentity: notre champ transversal de validation en regardant les deux champs, mais il ne fait pas le reste de la validation, telles que celles du modèle de données, ou celles des méthodes de validation personnalisée. Pour gérer ceux-ci, nous avons besoin d'un appel à super.

La meilleure façon de gérer cela est de simplement appeler super si validateNameOrSecretIdentity: renvoie NO. Généralement, une fois nous avons touché une erreur, nous ne gardons pas aller. Nous pourrions mettre en œuvre une version plus complexe qui a maintenu une piste de course de toutes les erreurs et les a renvoyés, mais je vais garder les choses simples ici. Remplacez le code ci-dessus avec les éléments suivants pour obtenir le reste de la validation fonctionne à nouveau:

...
- (BOOL)validateForInsert:(NSError **)outError {
BOOL validated = [self validateNameOrSecretIdentity:outError];
if (!validated)
return validated;
return [super validateForInsert:outError];
}

- (BOOL)validateForUpdate:(NSError **)outError {
BOOL validated = [self validateNameOrSecretIdentity:outError];
if (!validated)
return validated;
return [super validateForUpdate:outError];
}

@end

Je m'excuse pour ça!

Aucun commentaire: