NSTreeController производит задержку при удалении узла

Я использую NSTreeController + NSOutlineView для отображения большого дерева (с более чем 1K узлов). Дерево строится со списком смежности. В NSTreeController включена 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

Это нормальное поведение? Как я могу это предотвратить?


person sim    schedule 10.03.2015    source источник


Ответы (1)


На самом деле это не проблема NSTreeController. Так работает Core Data при удалении NSManagedObject. Если у вас есть в вашей сущности отношения с правилом удаления eq 'cascade', он загружает все связанные объекты (или выполняет объекты сбоя) для такой сущности, а затем удаляет их один за другим.

Поэтому, если вы используете «каскадное» правило и бэкэнд sqlite, Core Data применяет «каскадное» правило само по себе и не передает на бэкэнд.

person sim    schedule 11.03.2015