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

Xcode 核心数据保存错误(NSValidationErrorKey,Cocoa错误1570)保存NSDate,xcode,core-data,nsdate,Xcode,Core Data,Nsdate,我在Xcode中保存到核心数据对象时出错 Xcode说错误出现在NSDate变量“datum”中,但我几乎尝试了所有方法。 错误是: 2011-07-12 18:01:29.068 WeekLijstje[3205:207] Core Data Save Error NSValidationErrorKey datum NSValidationErrorPredicate (null) NSValidationErrorObject <DagLijst: 0x6e2fcd0>

我在Xcode中保存到核心数据对象时出错

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

您可以看到我在'datum'变量中加入了一个NSDate。但是在执行时,我仍然得到一个错误。

cocoa错误
1570
意味着没有填写必填字段。 在这种情况下,您有两个属性
nil
Voedsel
datum

我在你的代码中看到:

newDaglijst.Voedsel = geselecteerdVoedsel;
newDaglijst.datum = selDatum;
检查
geselecterdvoedsel
seldatam
是否为零,或者它们是否被高估,最终是否为零。 如果它们是可选数据(但我不这么认为),请在coredata中将它们定义为可选数据


希望有此帮助,

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

正如Michael A所说。检查属性值是否不为零。 有两种方法可以消除这些错误。 案例1:如果需要两个属性

如果这两个属性是必需的属性,则必须检查您传递的值是否为非零,有时可能会发生这种情况,如果您想摆脱这些错误,则必须在数据模型中实体的属性检查器中为这些属性提供默认值

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

我也挣扎了好几天才知道这些错误。
希望它能帮助一些人。

与日期无关,但有一个错误,我与大家分享,因为这个问题有更多的观点:

在我的例子中,我将
BOOL
属性直接设置为
YES
NO
,但您应该使用

NSNumber编号Withbool


为了使其工作。

为了强化Michael的答案,您可以在inspector中检查实体属性。您的其中一个项目可能被意外地视为可选项目,或者不可选。或者,如果你像我一样,你的“删除规则”可能被设置为“null”,这使得我的实体的关系属性在运行时
Nil
。因为要删除的“我的对象”与其他一些对象具有一对多关系,所以它阻止删除父对象。将其更改为
Cascade
解决了问题


您的日志记录如下所示:

Fatal error: 'try!' expression unexpectedly raised an error: 
Error Domain=NSCocoaErrorDomain Code=1560 "(null)" UserInfo={NSDetailedErrors=(
...
这意味着您对一个实体的一个(或多个)属性有一个未提交的更改,在该更改中您告诉它不是可选的,但您将其保留为可选的

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

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

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

在我的例子中,子上下文有正确的数据,而父上下文在尝试保存时没有数据。。!!一切都是零!!如何确保数据反映到父级?与我的问题相关的链接是:我在尝试将
NO
保存到我们用作布尔值的
NSNumber
中时遇到了同样的问题。我绞尽脑汁想了一个小时,才意识到我需要在这里使用
@NO
相同的方法:尝试将0写入非可选的
NSNumber
属性,将其设置为
nil
。改为分配
@0
UserInfo={NSValidationErrorObject=<YOURENTITYISHERE: ...>
NSValidationErrorKey=YOURPROPERTYISHERE