0

我有一个显示原型项目网格的 NSCollectionView,这一切都通过核心数据、接口绑定和 NSValueTransformer 处理,如果不存在真实图像,则在 NSCollectionViewItem 内显示占位符图像。

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

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

我采取的步骤是:

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 错误。

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

4

1 回答 1

0

解决了。

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

于 2017-10-18T13:22:31.797 回答