我在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'变量中。但是在执行时我仍然会收到错误。
答案 0 :(得分:150)
可可错误1570
表示未填写必填字段。
在这种情况下,您有两个归属nil
:Voedsel
和datum
。
我在你的代码中看到了:
newDaglijst.Voedsel = geselecteerdVoedsel;
newDaglijst.datum = selDatum;
检查geselecteerdVoedsel
和selDatum
是否为零或者是否过度释放并且结束为零。
如果它们是可选数据(但我不这么认为),请在coredata中将它们定义为可选数据。
希望得到这个帮助,
答案 1 :(得分:3)
如果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
解决了问题。