コアデータとの関係が保存した後で誤差の削除
-
13-09-2019 - |
質問
この問題がある。できない図になっている私のコアのデータプロジェクトの時に保存した後に削除する。
私は主に二つの主体とし、服、。できますしていくものと考えられても問題ありませんが削除しないかのエラーログ:
の衣装:
2009-09-22 20:17:37.771 itryiton[29027:20b] Operation could not be completed. (Cocoa error 1600.)
2009-09-22 20:17:37.773 itryiton[29027:20b] {
NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1600.)";
NSValidationErrorKey = outfitArticleViewProperties;
NSValidationErrorObject = <Article: 0x12aa3c0> (entity: Article; id: 0x12b49a0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/Article/p1> ; data: {
articleID = 2009-09-22 19:05:19 -0400;
articleImage = 0x12b4de0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/ArticleImage/p1>;
articleType = nil;
attributeTitles = "(...not nil..)";
color = nil;
comment = nil;
dateCreated = 2009-09-22 19:05:19 -0400;
designer = nil;
imageView = "(...not nil..)";
location = "(...not nil..)";
outfitArticleViewProperties = (
0x12b50f0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/OutfitArticleViewProperties/p1>
);
ownesOrWants = 0;
pattern = nil;
price = nil;
retailer = nil;
thumbnail = "(...not nil..)";
washRequirements = nil;
wearableSeasons = nil;
});
NSValidationErrorValue = {(
<OutfitArticleViewProperties: 0x1215340> (entity: OutfitArticleViewProperties; id: 0x12b50f0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/OutfitArticleViewProperties/p1> ; data: {
article = 0x12b49a0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/Article/p1>;
articleViewPropertiesID = nil;
outfit = nil;
touch = nil;
view = "(...not nil..)";
})
)};
}
とを削除する記事を取得します:
2009-09-22 18:58:38.591 itryiton[28655:20b] Operation could not be completed. (Cocoa error 1560.)
2009-09-22 18:58:38.593 itryiton[28655:20b] DetailedError: {
NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1600.)";
NSValidationErrorKey = articleImage;
NSValidationErrorObject = <Article: 0x12aa340> (entity: Article; id: 0x12b3f10 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/Article/p1> ; data: {
articleID = 2009-09-22 18:58:26 -0400;
articleImage = 0x12b4d00 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/ArticleImage/p1>;
articleType = nil;
attributeTitles = "(...not nil..)";
color = nil;
comment = nil;
dateCreated = 2009-09-22 18:58:26 -0400;
designer = nil;
imageView = "(...not nil..)";
location = "(...not nil..)";
outfitArticleViewProperties = (
0x12b5010 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/OutfitArticleViewProperties/p1>
);
ownesOrWants = 0;
pattern = nil;
price = nil;
retailer = nil;
thumbnail = "(...not nil..)";
washRequirements = nil;
wearableSeasons = nil;
});
NSValidationErrorValue = <ArticleImage: 0x12ad600> (entity: ArticleImage; id: 0x12b4d00 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/ArticleImage/p1> ; data: {
article = 0x12b3f10 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/Article/p1>;
image = "(...not nil..)";
});
}
A1600エラー:
NSValidationRelationshipDeniedDeleteerror
エラーコードを表示一部の関係
と削除-ルールNSDeleteRuleDenyは
非空です。ご利用Mac OS X v10.4以降である。
宣言されたCoreDataErrors.hです。
が見えないことに気づいたの人生のうる関係を防止を削除します。場合は一部のコミュニケーションウィザードでのエラーの方、私は恐れ多.
できないこるのであまり気にしなかった問題を解決し、いい仕事しているのです。の .m
各自 managedObjects
加える方法を次のように記述されています。
-(void) deleteFromManangedObjectContext{
self.outfit = nil;
self.article = nil;
[[self managedObjectContext] deleteObject:self];
}
確認できますので、まず手動でnilの関係、およびそのオブジェクトの削除そのものです。その他の物ではなく、 nil-ing
, 私の削除方法を呼び出したときに、一部のオブジェクトに関してもらいましょうカスケード.
解決 3
私は実際にそれを解決していないので、これは、解決マークを付けることはできませんが、私は仕事の周りの作業を持っています。私managedObjectsのそれぞれのための.mでは、私はのように見える方法を追加します:
-(void) deleteFromManangedObjectContext{
self.outfit = nil;
self.article = nil;
[[self managedObjectContext] deleteObject:self];
}
あなたが見ることができるようには、最初に私は手動での関係をnilを、そして私は、オブジェクト自体を削除しています。他のオブジェクトでは、代わりにnilを-INGの、私のdeleteメソッドは、カスケードを取得するには、オブジェクト関係の一部で呼び出されます。
私はまだ「正しい」答えに興味があります。しかし、これは私が持っている最高のソリューションであり、それは私の関係が削除されている方法を超えるいくつかの細かな制御を可能ん。
他のヒント
私は失敗し、削除の問題があったが、この質問に上陸しました。そして私は私の問題を考え出したし、私もそれを共有したいと、おそらく誰かが同様に同じ問題を抱えているだろうと考えました。
私が作った間違いは、私が削除しようとしています(A)オブジェクトがNULLとして削除規則を持つ別のオブジェクト(B)との関係を持っているということです。しかし、オブジェクトBもAとの関係を持っており、それが非オプションです。したがって、私は削除した場合、AのBの関係が許可されていないゼロになります。私はカスケード削除規則を変更し、それが働いたとき。
あなたは関係自分自身にアクセサの一部を実装するために起こるのですか? 私はかつて
のようなコードを持っていました-(NSSet*)articles
{
re-calculates properties....
return [self primitiveValueForKey:@"articles"];
}
NSManagedObjectのサブクラスでと保存エラーが発生しました。 何が起こったのは、このオブジェクトはManagedObjectContextから削除された場合、CoreDataは削除伝播に対処するためのアクセサ「記事」を呼び出す、ということでした。記事のこの再計算は無効「の記事は、」私の場合には、surrected再削除伝播、発生しました。
xcdatamodel
削除ルールのためにあなたのDeny
ファイルを確認してください。あなたはそれを見つけるまで、各関係をクリックします。あなたは、このルールを変更したり、あなたが関係するルールの適用を予測するために、管理対象オブジェクトを削除する方法を調整する必要があります。
私はそれは問題が.xibファイルであったが、同様の問題がありました。私は、関連するアレイコントローラの(Bindings->コンテンツの設定の下で)「削除上のオブジェクトを削除します」のチェックボックスに切り替えた場合、問題が去っていきました。
これはあなたのケースで役立つ場合は、は分からないのですが、私は毛の多くはどこかにInterface Builderの内部に隠され判明問題超えるグレー行かなければならなかった。
私の場合、もともとって無邪気に作成したカスタム方法のサブクラスのNSManagedObject:isDeleted.私は出会う不思議な存の例外まで除去し/に名称変更します。失い、私のアメニティにおいて、書類にもより完全です。分で出しオーバーライドのNSManagedObject方法の一つになオーバーライド.
チェックがこれからの抜粋docsす:
方法はいけませんオーバーライド
NSManagedObject自身のカスタマイズした多くの特徴のNSObjectう 管理オブジェクトを適切に統合し、コミュニケーション インフラです。 コアデータに依存してNSManagedObjectの実施 以下のいずれかの方法には、そのために絶対はならない オーバーライド: primitiveValueForKey:,setPrimitiveValue:forKey:, isEqual:,ハッシュスーパークラス、クラス、自己isProxy,isKindOfClass:, isMemberOfClass:,conformsToProtocol:,respondsToSelector:, managedObjectContext,体objectID,isInserted,isUpdated, isDeleted, は、isFault,alloc,allocWithZone:,新instancesRespondToSelector:,instanceMethodForSelector:, methodForSelector:,methodSignatureForSelector:, instanceMethodSignatureForSelector:isSubclassOfClass:.
まあその他の方法をオーバーライドすることができますが呼び名を付けなければなスーパーのように実施または電話: willAccessPrimitiveForKey, didAccessPrimitiveForKey
にaccessorsと willChangevalueForKey, didChangeValueForKey
にセッター....
私は最近、このエラーが発生しました。(BOOL)がすでにtrueを返しisDeleted
私はでそれを固定します:
- (void)willSave {
if (![self isDeleted]) {
//Do stuff...
}
}
私は非オプションの親子関係上、カスケード削除と非常に類似した問題が発生しました。私は親の関係はルールがカスケードに設定した削除と思ったので、それは非常に混乱しました。これは、Xcodeでのデータモデルエディタが削除規則を保存していなかったことが判明します。私は、カスケードに設定して別のビューに移動して戻ってきて、再び無効に設定されますでしょう。私はXcodeのを再起動し、カスケードへの削除規則を設定する必要がありました。私がやった後は、このすべてが働いています。
誰がXcodeのは、より複雑なソリューション掘り下げる前に、削除規則を保存していることを、この問題の二重チェックが発生した場合だ。
私はXcodeの5のデータモデルエディタでのiOS上のコアデータを使用しています。
ところで