gpt4 book ai didi

cocoa - 核心数据图像不会加载到 NSTableView 图像单元中

转载 作者:行者123 更新时间:2023-12-03 17:44:55 26 4
gpt4 key购买 nike

在我的代码中,我将图像存储到我的核心数据模型中(工作正常)。如果我将 View 设置为具有 NSImageView 并将其数据绑定(bind)到 Controller Key:selection 和 modelKeyPath:myImagePath,则它可以工作。它将显示所选行的每个图像。

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

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

非常感谢。

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

最佳答案

我不确定是什么原因导致了您的问题,但有一个简单的方法可以找出问题所在。将 NSValueTransformer 连接到绑定(bind)。然后在该变压器中,您可以记录一些内容以查明您是否传递了 nil 值,或者您可以将数据值转换为 NSImage 并将其传回……基本上您可以在变压器类中做任何您想做的事情。这是我在核心数据模型中的图像数据上使用的一个。

@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];
}

然后在 Interface Builder 中将“DataToImageTransformer”放入绑定(bind)中。现在您可以控制绑定(bind),并且可以按照我之前在变压器类中解释的那样进行。请注意,我使用 NSKeyedArchiver 将 NSImage 转换为数据并再次转换回来,但您可以使用 tiffRepresentation 或您想要的任何其他方法来代替它。

关于cocoa - 核心数据图像不会加载到 NSTableView 图像单元中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2862330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com