【发布时间】:2012-07-14 01:52:08
【问题描述】:
我通过valuePath 绑定将NSImageView 绑定到磁盘上的文件。当我在该位置写出新图像时,我希望NSImageView 显示新图像。我怎样才能做到这一点?
我尝试在视图绑定的对象上调用-didChangeValueForKey: 和-willChangeValueForKey:,并在对象上声明+keyPathsForValuesAffecting___ 方法,但我感觉这些基于KVO 的方法没有影响,因为图像的路径没有改变,只是它的内容。
我还尝试在更改发生后在图像视图上调用-setNeedsDisplay 和-updateCell:,但这也不起作用。
更新
在写入新图像之前,我将绑定对象上的-imagePath 属性(计算属性)更改为@"",然后立即返回正确的路径。这确实达到了预期的效果,但我希望 API 中存在更正确的方法。感觉就像是黑客攻击。
【问题讨论】:
-
NSImages 做一些缓存。如果您在文件更新时有权访问图像视图,有什么理由不能再次在视图上调用 setImage: 吗?
-
如前所述,我不调用
-setImage:,我在valuePath属性上使用绑定 -
您是否尝试过完全写入不同的值(如空字符串或虚假路径),然后立即恢复属性的原始值?
-
@KevinGrant 我打算这样做,但是该属性是计算出来的,所以这不像是普通的 ivar 支持的属性那么容易。这似乎也是一个黑客攻击。我想知道是否有一种“正确”的方式来做到这一点。
-
@KevinGrant 我确认确实有效(并更新了问题),但我仍然想知道是否有更合适的解决方案。
标签: objective-c macos cocoa cocoa-bindings nsimage