NSCollectionView删除ManagedObject会导致NSValueTransformer运行问题

时间:2017-10-18 12:21:41

标签: objective-c macos cocoa nscollectionview nsvaluetransformer

我有一个显示原型项网格的NSCollectionView,这些都是通过Core Data,Interface Bindings和NSValueTransformer来处理的,如果不存在真实图像,则在NSCollectionViewItem内显示占位符图像。

当我想从NSCollectionView中删除一个项目时,它会从集合视图中删除它,但会在它从视图消失之前闪烁我的占位符图像(从我的NSValueTransformer子类触发)一秒钟。

当检测到MOC中的对象已被删除时,我无法找到阻止NSValueTransformer运行的方法。为什么它还在运行?

我采取的步骤是:

for (MyEntityClass * obj in [myArrayController selectedObjects]) {

    [myArrayController removeObject: obj];    // This on its own works fine.
    [managedObjectContext deleteObject: obj]; // This causes a flash

}

如果我只是从MOC中删除对象(不从arrayController中删除),它会将占位符图像闪烁一秒钟。

有没有办法停止删除MOC对象,导致CollectionView在从视图中删除之前运行NSValueTransformer?

我尝试在ArrayController removeObject和MOC deleteObject之间添加一个延迟,它修复了图标的闪烁,但如果用户一次性删除一组项目,则导致Core Data字段不能为nil错误。

在占位符图像从集合视图中删除对象之前,是否有任何阻止占位符图像闪烁的想法?

1 个答案:

答案 0 :(得分:0)

解决了它。

问题是由于在for循环中保存了managedObjectContext(上面的示例代码中未显示)。当MOC保存时,由于导致故障的动画,当它仍在移除对象时刷新了collectionView。