3

CoreDataデータベース内のオブジェクトを一括削除するための最良の方法を見つけようとしています。

親子関係のあるオブジェクトがいくつかあります。時々、既存の子オブジェクトをすべてクリアし、新しいオブジェクトをCore Dataに追加して、親オブジェクトを「更新」する必要があります。この操作の「すべて削除」の部分は、私が問題にぶつかっているところです。これを実現するには、子をループして、それぞれに対してdeleteObjectを呼び出します。

15,000個のオブジェクトを削除する場合、NSManagedObjectContext:Save呼び出しの後、すべてのdeleteObject呼び出しに続く呼び出しが非常に遅いことに気付きました。

この通話をスピードアップするにはどうすればよいですか?保存操作中に、パラメーターを別の方法で設定したり、モデルを別の方法で設定したりすることで、認識して回避できることがありますか?この操作中にもメモリが急増することに気づきました。本当に「削除*」したいだけです。

ありがとう。

4

3 に答える 3

1

関係の依存関係のグラフを確認してください。最初の削除によってトリガーされた一連の削除により、処理速度が低下します。これらの削除が不要な場合は、削除ルールを変更してください。

于 2010-05-04T17:11:08.000 に答える
1

Core Dataモデルに親エンティティと子エンティティがあり、親が子と呼ばれる子と多対数の関係にあるとすると、次のようにループすることなく、すべての子オブジェクトを削除できるはずです。

NSManagedObject *parentObject = ...;
[parentObject setValue:nil forKey:@"children"];

またはCoreDataで生成された方法を使用する

- (void)removeChildren:(NSSet *)value;

NSSet *children = [parentObject valueForKey:@"children"];
[parentObject removeChildren:children];

これによりNSManagedObjectContextの保存操作が高速化されるかどうかはわかりません。公演について教えてください。

于 2010-05-04T18:32:46.107 に答える
1

アップルのウェブサイトによると:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdCreateMOs.html それは非常に簡単です:

管理対象オブジェクトの削除は簡単です。管理対象オブジェクトコンテキストにdeleteObject:メッセージを送信し、削除するオブジェクトを引数として渡すだけです。

[aContext deleteObject:aManagedObject];

これにより、管理対象オブジェクトがオブジェクトグラフから削除されます。コンテキストが保存されるまで新しいオブジェクトがストアに保存されないのと同様に、削除されたオブジェクトはコンテキストが保存されるまでストアから削除されません。

于 2012-01-16T06:50:11.337 に答える