如何通过路径绑定NSImageView?

时间:2015-04-27 21:19:04

标签: macos core-data cocoa-bindings nsimageview

我有一个带有tableview /核心数据对象详细信息的程序。 其中一个属性是图像(它只出现在细节中)。 我认为最好只保存图像文件的路径,而不是图像本身(在我看来,带图像的核心数据文件比图像大得多,即使只有更多。 ..)。

由于假设用户将图像拖动到图像井,我认为使用"值路径"将图像井绑定到阵列控制器(AC)是合适的。 (AC.selection.image)。 但是,这并没有做任何事情(imagewell接受拖动的图像,但是当我们改变选择时它会保留在那里)。

在我看来,我必须实现一些" Value Transformer",而不是那些可用的(NSUnarchiveFromData和NSKeyedUnarchiveFromData),因为我已经尝试了那些......

我对这个假设是对的吗?如果是这样,变压器的价值是多少?这是我必须要定义的吗?或者这完全不可能?

也许我应该补充一点,我仍在使用OSX 10.6,因此似乎排除了一些假设......

由于

2 个答案:

答案 0 :(得分:0)

是。这是可能的。

  1. 选择图片视图
  2. 将它绑定到对象控制器。在该值路径字段中,您必须将路径值设置为字符串属性

答案 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];
}