在我的代码中,我将图像存储到我的核心数据模型中(工作正常)。如果我将视图设置为具有 NSImageView 并将其数据绑定到控制器键:选择和 modelKeyPath:myImagePath,它有效。它将显示所选行的每个图像。

然后,我在 NSTableView 中创建一个新列,并将图像单元格拖到该列上。但是,我无法让我的核心数据绑定将图像显示在单元格中。我尝试过绑定值和数据,但没有成功。

既然我确定图像已正确存储,那么我在绑定中做错了什么以防止图像显示在表格单元格中?

非常感谢。

(我的背景:最近读完整本 Hillegass 书的新 Cocoa 开发人员。)

有帮助吗?

解决方案

我不确定会导致您的问题发生什么,但是有一种简单的方法可以找出问题。将NSVALUETRANSFORMER连接到绑定。然后,在该变压器中,您可以记录内容以找出是否传递零值,也可以将数据值转换为nsimage并将其转移回去……基本上,您可以在变压器类中做任何您想做的事情。这是我在Core-DATA模型中使用的图像数据。

@interface DataToImageTransformer : NSValueTransformer {

}

@end


@implementation DataToImageTransformer

+ (Class)transformedValueClass {
    return [NSImage class];
} // the class of the return value from transformedValue:

+ (BOOL)allowsReverseTransformation {
    return YES;
} // if YES then must also have reverseTransformedValue:

- (id)transformedValue:(id)value {
    if (value == nil || [value length] < 1) return nil;
    NSImage* i = nil;
    if ([value isKindOfClass:[NSData class]]) {
        i = [NSKeyedUnarchiver unarchiveObjectWithData:value];
    }
    return i;
}

- (id)reverseTransformedValue:(id)value {
    if (value == nil) return nil;
    NSData* d = nil;
    if ([value isKindOfClass:[NSImage class]]) {
        d = [NSKeyedArchiver archivedDataWithRootObject:value];
    }
    return d;
}

@end

在AppController类中,您可以初始化变压器:

+ (void)initialize {
    DataToImageTransformer *transformer = [[DataToImageTransformer alloc] init];
    [NSValueTransformer setValueTransformer:transformer forName:@"DataToImageTransformer"];
    [transformer release];
}

然后,在接口构建器中,您将“ datatoimagetransformer”放入绑定中。现在,您可以控制绑定,并且可以像我之前在变压器类中所解释的那样做。请注意,我正在使用NSKeyEdarachiver将NSIMIMAIGE转换为数据并再次返回,但是您可以使用Tiffermentation或您想要的任何其他方法。

其他提示

如果有人对 Xcode 6 的建议技术有疑问。我使用基于文档的应用程序创建了一个 Swift 项目。使用 ImageWell 控件 (NSImageView),绑定可以直接工作,无需变压器。不过,有一个细节是,将您绑定到视图本身的数据绑定上,而不是绑定到其下的 ImageCell 对象上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top