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.
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,
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.
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.
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.
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.
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.