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

时间:2011-07-12 16:22:02

标签: xcode core-data nsdate

我在Xcode中保存到Core数据对象时遇到错误。

Xcode说错误在NSDate变量'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'变量中。但是在执行时我仍然会收到错误。

5 个答案:

答案 0 :(得分:150)

可可错误1570表示未填写必填字段。 在这种情况下,您有两个归属nilVoedseldatum

我在你的代码中看到了:

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

检查geselecteerdVoedselselDatum是否为零或者是否过度释放并且结束为零。 如果它们是可选数据(但我不这么认为),请在coredata中将它们定义为可选数据。

希望得到这个帮助,

答案 1 :(得分:3)

正如迈克尔A所说的那样。检查你的属性值是不是零。 有两种方法可以摆脱这些错误。 案例1:如果需要2个属性

如果2个属性是必需属性,则必须检查传递的值是否为nil,有时可能会发生,如果你想要摆脱这些错误,你必须为属性中的那些属性赋予默认值数据模型

中您的实体的检查员

案例2: 通过选择可选项的复选标记,将这些属性设置为属性检查器中的可选项。

我几天都在努力了解这些错误。 希望它可以帮到某人。

答案 2 :(得分:1)

您的日志记录如下:

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

这意味着您对某个实体的一个(或多个)属性进行了未提交的更改,在该更改中您告诉它不是可选的,但您将其保留为可选。

要找出未能为属性设置值的实体,请在日志记录中查找:

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

要查找该属性,请搜索:

NSValidationErrorKey=YOURPROPERTYISHERE

在代码中的某些地方,您忘记为给定实体设置该属性的值。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

为了强化迈克尔的答案,您可以在检查器中检查您的实体属性。您的其中一件物品可能会被意外地视为可选或不可选。或者,如果您像我一样,您的“删除规则”可能已设置为“Nullify”,这会在运行时使我的实体的关系属性Nil。由于我的被删除对象与其他一些对象具有一对多关系,因此无法删除父对象。将其更改为Cascade解决了问题。

Entity Inspector - Delete Rule