核心数据保存错误(NSValidationErrorKey,Cocoa错误1570)保存NSDate

我在保存到Xcode中的Core数据对象时出错。

Xcode说,错误是在NSDatevariables'datum',但我已经尝试几乎所有东西。 错误是:

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

小码snipet:

  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]) { ... 

也是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 

所以你可以看到我把一个NSDate放入'datum'variables中。 但执行中,我仍然得到一个错误。

cocoa错误1570意味着必填字段没有填写。在这种情况下,您有两个属性,分别是Voedseldatum

我在你的代码中看到:

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

检查geselecteerdVoedselselDatum是否为零,或它们是selDatum ,并完成为零。 如果他们是可选的数据(但我不这么认为),在coredata中将它们定义为可选的。

希望这个帮助,

正如Michael A所说。 检查你的属性值不是零。 有2个select摆脱这些错误。 情况1:如果2个属性是必需的

如果2个属性是必需的属性,那么检查你传递的值不是零是必须的,有时可能会发生,如果你想摆脱这些错误,你必须给你属性检查器的属性默认值数据模型中的实体

情况2:通过select可选的复选标记,在属性检查器中将这些属性设置为可选。

我也为挣扎了好几天才知道这些错误。 希望它可以帮助别人。

我从其他xcdatamodeld文件中复制实体时遇到此问题。 他们失去了逆向的属性,所以这就是原因。

没有真正与date相关,但与错误,我分享它,因为这个问题有更多的意见:

在我的情况下,我直接设置BOOL属性为YESNO ,但是您应该使用

NSNumber numberWithBOOL

为了使它工作。