我有一个带有tableview /核心数据对象详细信息的程序。 其中一个属性是图像(它只出现在细节中)。 我认为最好只保存图像文件的路径,而不是图像本身(在我看来,带图像的核心数据文件比图像大得多,即使只有更多。 ..)。
由于假设用户将图像拖动到图像井,我认为使用"值路径"将图像井绑定到阵列控制器(AC)是合适的。 (AC.selection.image)。 但是,这并没有做任何事情(imagewell接受拖动的图像,但是当我们改变选择时它会保留在那里)。
在我看来,我必须实现一些" Value Transformer",而不是那些可用的(NSUnarchiveFromData和NSKeyedUnarchiveFromData),因为我已经尝试了那些......
我对这个假设是对的吗?如果是这样,变压器的价值是多少?这是我必须要定义的吗?或者这完全不可能?
也许我应该补充一点,我仍在使用OSX 10.6,因此似乎排除了一些假设......
由于
答案 0 :(得分:0)
是。这是可能的。
答案 1 :(得分:0)
根据我的经验,“值路径”和“值URL”绑定仅是单向工作,例如,您可以使用它们指定图像视图的内容,但是您可以不能从拖动的图像中提取路径/ URL 。 The documentation说“绑定是只读的”,这有点含糊,但是我相信这就是它的含义。
我最终只使用了一个文本框,其中包含一个路径,一个“ Choose…”按钮,并且图像视图只是预览。但是,如果您真的想要“ Image Well”功能,我建议您使用类似KSImageView(GitHub要点)的方法,该方法可以从NSPasteboard
中获取路径并进行存储/重新广播。这是该功能的主要方法(从NSImageView
继承后):
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender {
NSPasteboard *pboard = sender.draggingPasteboard;
NSString *plist = [pboard stringForType:NSFilenamesPboardType];
if (!plist) return;
NSArray<NSString*> *files =
[NSPropertyListSerialization propertyListWithData:[plist dataUsingEncoding:NSUTF8StringEncoding]
options:NSPropertyListImmutable
format:NULL
error:NULL];
if (files.count == 0) return;
NSDictionary *userInfo = @{@"imagePath": files[0]};
[[NSNotificationCenter defaultCenter] postNotificationName:@"KSImageDroppedNotification"
object:self
userInfo:userInfo];
}