0

NSTreeController+を使用NSOutlineViewして大きなツリー (1K 以上のノード) を表示します。ツリーは、隣接リストを使用して構築されます。InNSTreeControllerは LazyFetching をオンにします。ノードを削除しようとすると、NSTreeControllerすべてのフォールト子孫ノードの処理が開始されます。ツリーが大きい場合、遅延が発生します。

フルフィルのログは次のとおりです。

2015-03-10 17:10:22.945 TreeTest[1909:303] CoreData: sql: SELECT 0, t0.Z_PK FROM ZENTITY t0 WHERE  t0.ZPARENT = ? 
2015-03-10 17:10:22.946 TreeTest[1909:303] CoreData: annotation: sql connection fetch time: 0.0007s
2015-03-10 17:10:22.947 TreeTest[1909:303] CoreData: annotation: total fetch execution time: 0.0012s for 0 rows.
2015-03-10 17:10:22.947 TreeTest[1909:303] CoreData: annotation: to-many relationship fault "children" for objectID 0x100568450 <x-coredata://5DB6B2D8-646B-4D2B-ACEA-86E91B6523FB/Entity/p3390> fulfilled from database.  Got 0 rows

それは正常な動作ですか?どうすれば防ぐことができますか?

4

1 に答える 1

0

実際には の問題ではありませんNSTreeController。が削除されているCore Dataときの動作です。NSManagedObjectエンティティ関係に削除ルール eq 'cascade' がある場合、そのようなエンティティに関連するすべてのオブジェクトをロード (または障害オブジェクトを満たす) し、それらを 1 つずつ削除します。

したがって、「カスケード」ルールと sqlite バックエンドを使用する場合、Core Data「カスケード」ルールを単独で適用し、バックエンドでリレーしません。

于 2015-03-11T06:47:07.980 に答える