NSTreeController在删除节点时产生延迟

时间:2015-03-10 14:19:55

标签: macos cocoa tree 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

这是正常行为吗?我该怎样预防呢?

1 个答案:

答案 0 :(得分:0)

实际上这不是NSTreeController的问题。删除Core DataNSManagedObject的工作原理。如果你的实体关系中有删除规则eq'cascade',它会为这样的实体加载所有相关对象(或实现故障对象),然后逐个删除它们。

因此,如果您使用“级联”规则和sqlite后端,Core Data会自行应用“级联”规则,并且不会在后端进行中继。