我不知道发生了什么导致你的问题,但有一个简单的方法来找出。将一个NSValueTransformer连接到绑定。然后在那个转换器中,你可以记录一些东西,看看你是否传递了一个零值,或者你可以把你的数据值转换成一个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” 为绑定。现在你可以控制绑定,并且可以按照前面在变换器类中解释的那样进行操作。请注意,我使用NSKeyedArchiver将NSImage转换为数据并再次返回,但是您可以使用tiffRepresentation或其他所需的方法代替它。
谢谢,这工作!唯一的问题是,我通过将数据绑定到NSTableColumn来获得不推荐的警告。但是,使用NSKeyedArchiver保存图像数据并使用该变换器检索图像数据的策略是成功的。 – jcady 2010-05-19 16:41:12
我记得有关绑定的一个被弃用,所以使用其他绑定,而不是...是它的价值绑定?你也可以使用这个绑定,如果不是只是根据需要修改变换器来返回任何需要的对象。 – regulus6633 2010-05-19 17:30:44