将 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
时,如何访问拖动的(新)图像?
我花了很长时间深入 NSPasteboard
和 NSImageView
子类(试图完成 performDragOperation
)。
问题是由于 NSValueTransformer
不知道如何处理 NSPasteboard
在绑定时传递给它的 URL,图像被放到它上面。
最后,解决该问题的最简单方法是在 cocoa-绑定绑定 NSImageView
之上添加一个 NSImageView
。最顶层的图像视图接受拖动操作,更新托管对象,然后清除其 .image 属性。底部图像视图注意到它绑定到的托管对象已更新,然后正确更新图像。
所以:
- 顶部图像视图接受拖放然后自行清除
- 底部(模糊)图像视图是一个 cocoa-绑定图像视图,仅用于显示,不接受拖放。
理想情况下,我会成为一名 NSValueTransformer
忍者并且知道如何反向转换掉落的粘贴板 url(当存在绑定时它总是 nil)但我选择了实用主义这个案例。
我有一个 NSImageView
可以很好地用作图像。它也是通过绑定的。使用值路径 属性 的值转换器来显示每条记录的已保存图像(值转换器只是附加文件路径——我只是将图像的文件名存储在数据库中)。
当我在没有值路径绑定(即用户尚未设置图像)的情况下将图像拖到图像井上时,一切正常 - 在数据库中缩放和设置图像,然后显示图像。如果数据库中已经有图像显示通过。绑定将新图像拖到图像井上会导致 NSImageView.image 到 return 零。图像视图本身不是零。
我通过在图像井上设置目标和动作来捕获图像井上的拖动图像。
imageWell.target = self
imageWell.action = "imageWellAction:"
当另一个图像已经绑定到 NSImageView
时,如何访问拖动的(新)图像?
我花了很长时间深入 NSPasteboard
和 NSImageView
子类(试图完成 performDragOperation
)。
问题是由于 NSValueTransformer
不知道如何处理 NSPasteboard
在绑定时传递给它的 URL,图像被放到它上面。
最后,解决该问题的最简单方法是在 cocoa-绑定绑定 NSImageView
之上添加一个 NSImageView
。最顶层的图像视图接受拖动操作,更新托管对象,然后清除其 .image 属性。底部图像视图注意到它绑定到的托管对象已更新,然后正确更新图像。
所以:
- 顶部图像视图接受拖放然后自行清除
- 底部(模糊)图像视图是一个 cocoa-绑定图像视图,仅用于显示,不接受拖放。
理想情况下,我会成为一名 NSValueTransformer
忍者并且知道如何反向转换掉落的粘贴板 url(当存在绑定时它总是 nil)但我选择了实用主义这个案例。