【问题标题】:Core Data Save Error (NSValidationErrorKey, Cocoa error 1570) saving NSDateCore Data Save Error (NSValidationErrorKey, Cocoa error 1570) 保存 NSDate
【发布时间】:2011-10-03 19:11:31
【问题描述】:

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

Xcode 说错误出在 NSDate 变量“基准”中,但我几乎尝试了所有方法。 错误是:

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 *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 放入了“基准”变量。但在执行时我仍然收到错误。

【问题讨论】:

    标签: xcode core-data nsdate


    【解决方案1】:

    可可错误1570表示必填字段未填写。 在这种情况下,您有两个属性 nil :Voedsel 和 datum。

    我在你的代码中看到了:

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

    检查geselecteerdVoedsel 和selDatum 是否不为零,或者它们是否被过度释放并最终为零。 如果它们是可选数据(但我不这么认为),请在 coredata 中将它们定义为可选。

    希望对您有所帮助,

    【讨论】:

    • 在我的情况下,子上下文有正确的数据,而父上下文在尝试保存时没有数据..!!一切都是零!!如何确保数据反映到父级?我的问题的链接是:stackoverflow.com/questions/19666178/…
    • 我在尝试将NO 保存在我们用作布尔值的NSNumber 中时遇到了同样的问题。我绞尽脑汁一个小时才意识到我需要使用@NO
    • 此处相同:尝试将 0 写入非可选的 NSNumber 属性,将其设置为 nil。改为分配@0。
    【解决方案2】:

    正如迈克尔 A 所说。检查您的属性值不为零。 有两种方法可以消除这些错误。 案例1:如果需要2个属性

    如果 2 个属性是必需的属性,则必须检查您传递的值不是 nil,有时可能会发生,如果您想摆脱这些错误,您必须在属性中为这些属性提供默认值数据模型中您的实体的检查员

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

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

    【讨论】:

      【解决方案3】:

      您的日志记录如下所示:

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

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

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

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

      要查找该属性,请搜索:

      NSValidationErrorKey=YOURPROPERTYISHERE
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          就我而言,我将BOOL 属性直接设置为YES 或NO,但您应该使用

          NSNumber numberWithBOOL

          为了让它工作。

          【讨论】:

            【解决方案6】:

            为了强化迈克尔的回答,您可以在检查器中检查您的实体属性。您的其中一项可能会被意外视为可选,或者不是。或者,如果您像我一样,您的“删除规则”可能已设置为“无效”,这在运行时使我的实体的关系属性Nil。因为我的要删除的对象与其他一些对象存在一对多关系,所以它阻止了父对象被删除。将其更改为Cascade 解决了这个问题。

            Entity Inspector - Delete Rule

            【讨论】:

              猜你喜欢
              • 2013-10-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-05-27
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多