将valuePath绑定到NSImageView会导致NSImageView.image在将新图像拖到imagewell时返回nil

时间:2016-02-14 17:54:11

标签: objective-c swift image cocoa-bindings nsimageview

我有NSImageView,可以很好地运作。它也受到约束。一个值转换器,使用值path属性显示每条记录的已保存图像(值转换器只是附加文件路径 - 我只是将图像的文件名存储在数据库中)。

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

我通过在图像上设置目标和动作来很好地捕捉图像上的拖动图像。

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

当其他图片已绑定到NSImageView时,如何访问拖动的(新)图片?

1 个答案:

答案 0 :(得分:0)

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

问题是由于NSValueTransformer不知道如何处理NSPasteboard在绑定并将图像放到其上时传递给它的网址。

最后,修复这种情况的最简单方法是在绑定NSImageView的可可绑定之上添加NSImageView。最顶层的图像视图接受拖动操作,更新托管对象,然后清除其.image属性。底部图像视图注意到它所绑定的托管对象已更新,然后正确更新图像。

所以:

  • 顶部图片视图接受拖动&滴,然后自行清除
  • bottom(模糊)图像视图是一个仅用于显示的可可绑定图像视图,不接受拖动和放大下降。

理想情况下,我会成为NSValueTransformer忍者并知道如何对已删除的粘贴板网址进行逆转换(当存在绑定时总是为零)但在这种情况下我选择了实用主义。