我不知道發生了什麼導致你的問題,但有一個簡單的方法來找出。將一個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