web-dev-qa-db-fra.com

Erreur d'enregistrement des données de base (NSValidationErrorKey, erreur 1570 de cacao) lors de l'enregistrement de NSDate

Je reçois une erreur lors de l'enregistrement dans un objet de données Core dans Xcode.

Xcode indique que l'erreur est dans la variable 'datum' de la variable NSDate, mais j'ai presque tout essayé . L'erreur est:

2011-07-12 18:01:29.068 WeekLijstje[3205:207] Core Data Save Error
NSValidationErrorKey    datum
NSValidationErrorPredicate  (null)

NSValidationErrorObject
<DagLijst: 0x6e2fcd0> (entity: DagLijst; id: 0x6e2fd30 <x-coredata:///DagLijst/t99F423FC-AAE9-4692-9264-EF0FF7A020572> ; data: {
    Voedsel = nil;
    datum = nil;
    hoeveelheid = 0;
    punten = 0;
})
NSLocalizedDescription:The operation couldn’t be completed. (Cocoa error 1570.)

Un petit bout de code:

        DagLijst *newDaglijst = [NSEntityDescription insertNewObjectForEntityForName:@"DagLijst" inManagedObjectContext:self.managedObjectContext];

        NSDate *selDatum = [NSDate date];
        newDaglijst.punten = [NSNumber numberWithInteger:10];
        newDaglijst.hoeveelheid = [NSNumber numberWithInt:100];
        newDaglijst.Voedsel = geselecteerdVoedsel;
        newDaglijst.datum = selDatum;
        NSError *error = nil;
        if (![newDaglijst.managedObjectContext save:&error]) {
...

Aussi la classe de l'objet DagLijst:

@interface DagLijst : NSManagedObject {
@private
}
@property (nonatomic, retain) NSDate * datum;
@property (nonatomic, retain) NSNumber * punten;
@property (nonatomic, retain) NSNumber * hoeveelheid;
@property (nonatomic, retain) Voedsel *Voedsel;

@end

Vous voyez donc que j'ai mis un NSDate dans la variable 'datum'. Mais lors de l'exécution, j'obtiens toujours une erreur.

48
Peter

L'erreur cacao 1570 signifie que les champs obligatoires ne sont pas renseignés . Dans ce cas, vous avez deux attributs qui sont nil: Voedsel et datum.

Je vois dans votre code:

newDaglijst.Voedsel = geselecteerdVoedsel;
newDaglijst.datum = selDatum;

Vérifiez que geselecteerdVoedsel et selDatum ne sont pas nuls ou qu'ils ont été annulés et finissent par être nuls. S'il s'agit de données facultatives (mais je ne le crois pas), définissez-les comme facultatives dans Coredata.

J'espère que cette aide,

146
Michael A.

comme l'a dit Michael A. Vérifiez que vos attributs ne sont pas nuls . Il existe deux alternatives pour supprimer ces erreurs . Cas 1: Si 2 attributs sont obligatoires

Si les 2 attributs sont des attributs obligatoires, alors il est obligatoire de vérifier que les valeurs que vous transmettez ne sont pas nil. Cela peut arriver parfois Entité dans le modèle de données

Cas 2: Définissez ces attributs sur facultatif dans l'inspecteur d'attributs en cochant la case optionnel.

Moi aussi, je me suis battu pendant des jours pour connaître ces erreurs ... J'espère que cela aidera quelqu'un.

3
skkrish

Votre journalisation ressemblerait à ceci:

Fatal error: 'try!' expression unexpectedly raised an error: 
Error Domain=NSCocoaErrorDomain Code=1560 "(null)" UserInfo={NSDetailedErrors=(
...

Cela signifie que vous avez une modification non validée pour une (ou plusieurs) propriété (s) d'une entité, dans laquelle vous avez indiqué qu'elle n'est PAS facultative, mais que vous l'avez laissée facultative.

Pour savoir quelle entité vous n'avez pas défini la valeur d'une propriété, recherchez ceci dans votre journalisation:

UserInfo={NSValidationErrorObject=<YOURENTITYISHERE: ...>

Pour trouver la propriété, recherchez:

NSValidationErrorKey=YOURPROPERTYISHERE

Quelque part dans votre code, vous oubliez de définir une valeur pour cette propriété pour l'entité donnée.

1
J. Doe

J'ai eu ce problème lorsque j'ai copié des entités d'un autre fichier xcdatamodeld . Elles ont perdu des attributs inverses, c'est donc la raison.

0
Shmidt

Pour renforcer la réponse de Michael, vous pouvez vérifier les propriétés de votre entité dans l'inspecteur. Un de vos objets peut être considéré accidentellement comme facultatif ou non. Ou, si vous êtes comme moi, votre "règle de suppression" a peut-être été définie sur "Nullify", ce qui a rendu la propriété de relation de mon entité Nil à l'exécution. Étant donné que mon objet à supprimer avait une relation un-à-plusieurs avec d'autres objets, il empêchait la suppression des objets parents. Le changer en Cascade a résolu le problème. 

Inspecteur d'entité - Supprimer la règle

0
Tim Isenman

Pas vraiment lié à la date, mais à l'erreur, je le partage car cette question a plus de points de vue:

Dans mon cas, je définissais une propriété BOOL directement comme YES ou NO, mais vous devriez utiliser 

NSNuméro numéroWithBOOL

afin de le faire fonctionner.

0
htafoya