NSTreeController 在删除节点时产生延迟
NSTreeController produces a delay when removing a node
我使用 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
这是正常行为吗?我该如何预防?
其实不是NSTreeController
的问题。这是删除 NSManagedObject
时 Core Data
的工作方式。如果您的实体与删除规则 eq 'cascade' 有关系,它会为该实体加载所有相关对象(或满足故障对象),然后一一删除它们。
因此,如果您使用 'cascade' 规则和 sqlite 后端,Core Data
会自行应用 'cascade' 规则,不会在后端中继。
我使用 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
这是正常行为吗?我该如何预防?
其实不是NSTreeController
的问题。这是删除 NSManagedObject
时 Core Data
的工作方式。如果您的实体与删除规则 eq 'cascade' 有关系,它会为该实体加载所有相关对象(或满足故障对象),然后一一删除它们。
因此,如果您使用 'cascade' 规则和 sqlite 后端,Core Data
会自行应用 'cascade' 规则,不会在后端中继。