Xcode 核心数据保存错误(NSValidationErrorKey,Cocoa错误1570)保存NSDate
我在Xcode中保存到核心数据对象时出错 Xcode说错误出现在NSDate变量“datum”中,但我几乎尝试了所有方法。 错误是: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>
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