web-dev-qa-db-ja.com

NSDateを保存するコアデータ保存エラー(NSValidationErrorKey、Cocoaエラー1570)

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

小さなコードスニペット:

        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'変数に入れていることがわかります。しかし、実行時にエラーが発生します。

51
Peter

ココアエラー1570は、必須フィールドが入力されていないことを意味します。この場合、nilの2つの属性があります:Voedseldatum

私はあなたのコードに見ます:

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

geselecteerdVoedselselDatumがnilでないこと、または過剰にリリースされてnilになっていることを確認してください。オプションのデータである場合(ただしそうは思わない)、coredataでオプションとして定義します。

この助けを願って、

152
Michael A.

マイケルAが言ったように。属性値がnilでないことを確認してください。これらのエラーを取り除くには、2つの選択肢があります。ケース1:2つの属性が必要な場合

2つの属性が必須属性である場合、渡す値がnilでないことを確認することが必須です。これらのエラーから抜け出したい場合は、属性インスペクターでこれらの属性のデフォルト値を指定する必要があります。データモデルのエンティティ

ケース2:オプションのチェックマークを選択して、属性インスペクターでこれらの属性をオプションに設定します。

私も何日もこれらのエラーを知るのに苦労しました。それが誰かを助けることを願っています。

3
skkrish

ロギングは次のようになります。

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

これは、エンティティの1つ(または複数)のプロパティにコミットされていない変更があることを意味します。このプロパティでは、オプションではないが、オプションのままにしました。

プロパティの値の設定に失敗したエンティティを見つけるには、ログでこれを探します。

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

プロパティを見つけるには、次を検索します:

NSValidationErrorKey=YOURPROPERTYISHERE

コードのどこかで、指定されたエンティティのプロパティの値を設定するのを忘れています。

1
J. Doe

他のxcdatamodeldファイルからエンティティをコピーしたときにこの問題が発生しました。彼らは逆属性を失ったので、それが理由でした。

0
Shmidt

Michaelの答えを補強するために、インスペクターでEntityプロパティを確認できます。アイテムの1つが誤ってオプションと見なされる場合とされない場合があります。または、あなたが私のような場合、「Delete Rule」が「Nullify」に設定されている可能性があります。これにより、実行時にエンティティの関係プロパティがNilになります。削除するオブジェクトは他のオブジェクトと1対多の関係にあるため、親オブジェクトが削除されませんでした。これをCascadeに変更すると、問題が解決しました。

エンティティインスペクター-ルールの削除

0
Tim Isenman

日付とはあまり関係ありませんが、エラーがあるので、この質問にはもっと多くの見方があるので、共有します

私の場合、BOOLプロパティをYESまたはNOとして直接設定していましたが、使用する必要があります

NSNumber numberWithBOOL

それを機能させるために。

0
htafoya