1

現在、カテゴリエンティティとアイテムエンティティの2つのエンティティがあり、Category:Itemは1:mです。

カテゴリ->アイテムの関係に「アクションなし」ルールを適用し、Category.prepareForDeletionを実装して、カテゴリを削除する前に、カテゴリ内のすべてのアイテムを特別なキャッチオールカテゴリに移動しました(キャッチオールカテゴリは削除できません)。 )。

- (void)prepareForDeletion {
    Category *misc = [Database theMiscCategory];
    [misc addItems:self.items];
    [super prepareForDeletion];
}

私の質問はこれです:私は何かが足りないのですか?そうでない場合は、「アクションなし」が高度な機能であるというXCodeの警告をオフにするにはどうすればよいですか?

FTR、私はnullifyを使用していません。これは、アプリケーションの他の領域がnullカテゴリのアイテムを処理するよりも、「その他」のカテゴリにあるものをダンプする方が便利だからです。私は実際にそれを最初に試しましたが、予期しない動作が発生しました-スーパーを最初に呼び出すと、変更するアイテムのセットを収集する前に関係が無効になり、その後に置くと、新しいカテゴリへの関係が取得されます無効になりました。それらを集めて、スーパーと呼んで、新しいカテゴリーを設定することができると思いますが、それは厄介なようです。

したがって、「アクションなし」が私が望んでいることだと思います。prepareForDeletionで管理する必要がある他のものを見逃していないことを確認したいだけです。

4

2 に答える 2

1

Category「アクションなし」が警告を生成する理由は、との間の関係の管理Itemが現在あなたに任されているためです。

したがって、に5つのItemオブジェクトを含むCategory呼び出しがあり、を削除した場合でも、5つのオブジェクトは削除された関係があると見なします。myCategorymyCategory.itemsmyCategoryItemmyCategory

最善のオプションは、ルールを「Nullify」に戻すことです。これにより、CoreDataが関係管理を処理できるようになります。この時点ではまだオブジェクトが含まれているprepareForDeletionため、今行っていることを引き続き実行できます。self.itemsItem

他の理由で「アクションなし」ルールを維持する必要がある場合は、の間に各Iteminself.items.categoryプロパティがnilに設定されていることを確認する必要がありますprepareForDeletion

于 2012-09-27T16:35:31.667 に答える
0

したがって、読み取りとソーク時間の間の答えは非常に単純なようです。はい、「nullify」を使用する理由がある場合は、参照整合性を維持するためにprepareForDeletionを適切に実装する必要があります。

于 2012-10-24T02:41:38.370 に答える