2009-08-11 9 views
2

NSDeleteRequestクラスは存在しませんが、私はそれが欲しいと思います。NSPredicateを使用してCore DataでNSDeleteRequestとNSFetchRequestを発行する方法はありますか?

私はNSPredicateを作成し、発行するNSFetchRequestを使用することができます。

は、x = yの

FOOから削除:

は、x = yの

がどのように発行することができFOOから選択*

1000行を削除する唯一の方法は、それらをフェッチし、それらをループし、各NSManagedObjectでdeleteを呼び出すことです。そうですか?なぜ私は1つのSQL文を削除できないのですか?

+1

一度に1つずつ削除して削除する必要がありますが、管理対象オブジェクトのコンテキストにバッチジョブを実行中であることを伝えるだけで、取り消しをサポートしたくない場合はすぐに保存してください。それは本当に問題ではありません。そうであれば、CoreDataを間違って使用していて、まっすぐなsqliteやRDBMSを使用してみたいと思うかもしれません。 –

答えて

4

管理オブジェクトを取得し、削除する各オブジェクトのコンテキストにを送信する必要があります。

コアデータが関係に指定されたカスケードまたは無効化ルールを守ることができるように、オブジェクトをメモリにフェッチする必要があります。

削除に必要なパフォーマンス上の問題がある場合(必要なフェッチを超えている場合)、Instrumentsで操作をプロファイルすると便利です。カスケード/無効化のルールが適用されているときに個別に障害を発している場合、関連するオブジェクトをプリフェッチするとパフォーマンスが向上します。

0

NSManagedObjectContextにカテゴリメソッド - (executeDeleteWithRequest:error :)を追加できます。

もちろん、ループを実行する必要がありますが、少なくとも問題を抽象化してコードを削除します。

関連する問題