将 valuePath 绑定到 NSImageView 会导致 NSImageView.image 到 return nil 将新图像拖到 imagewell 上

Binding valuePath to NSImageView causes NSImageView.image to return nil when dragging new images onto imagewell

我有一个 NSImageView 可以很好地用作图像。它也是通过绑定的。使用值路径 属性 的值转换器来显示每条记录的已保存图像(值转换器只是附加文件路径——我只是将图像的文件名存储在数据库中)。

当我在没有值路径绑定(即用户尚未设置图像)的情况下将图像拖到图像井上时,一切正常 - 在数据库中缩放和设置图像,然后显示图像。如果数据库中已经有图像显示通过。绑定将新图像拖到图像井上会导致 NSImageView.image 到 return 零。图像视图本身不是零。

我通过在图像井上设置目标和动作来捕获图像井上的拖动图像。

    imageWell.target         = self
    imageWell.action         = "imageWellAction:"

当另一个图像已经绑定到 NSImageView 时,如何访问拖动的(新)图像?

我花了很长时间深入 NSPasteboardNSImageView 子类(试图完成 performDragOperation)。

问题是由于 NSValueTransformer 不知道如何处理 NSPasteboard 在绑定时传递给它的 URL,图像被放到它上面。

最后,解决该问题的最简单方法是在 cocoa-绑定绑定 NSImageView 之上添加一个 NSImageView。最顶层的图像视图接受拖动操作,更新托管对象,然后清除其 .image 属性。底部图像视图注意到它绑定到的托管对象已更新,然后正确更新图像。

所以:

  • 顶部图像视图接受拖放然后自行清除
  • 底部(模糊)图像视图是一个 cocoa-绑定图像视图,仅用于显示,不接受拖放。

理想情况下,我会成为一名 NSValueTransformer 忍者并且知道如何反向转换掉落的粘贴板 url(当存在绑定时它总是 nil)但我选择了实用主义这个案例。