나는 당신의 문제가 발생하는 일이 있지만 찾을 수있는 쉬운 방법이 무엇 확실하지 않다. NSValueTransformer를 바인딩에 연결합니다. 그런 다음 해당 변압기에서 로그 값을 전달하여 무효 값을 전달하는지 확인하거나 데이터 값을 NSImage로 변환하여 전달할 수 있습니다. 기본적으로 트랜스포머 클래스에서 원하는 모든 작업을 수행 할 수 있습니다. 핵심 데이터 모델에서 이미지 데이터에 사용하는 방법은 다음과 같습니다.
+ (void)initialize {
DataToImageTransformer *transformer = [[DataToImageTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"DataToImageTransformer"];
[transformer release];
}
그런 다음 인터페이스 빌더에서 당신이 바인딩에 대한에 "DataToImageTransformer"를 넣어 :의 AppController 클래스에서
@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
당신은 변압기를 초기화합니다. 이제 바인딩에 대한 제어권을 가지며 이전에 변압기 클래스에서 설명한대로 수행 할 수 있습니다. NSKeyedArchiver를 사용하여 NSImage를 데이터로 변환하고 다시 사용하지만 tiffRepresentation이나 원하는 다른 방법을 사용할 수 있습니다.
감사합니다. 유일한 문제는 데이터를 NSTableColumn에 바인딩하여 비추천 경고를 받고 있다는 것입니다. 그러나 NSKeyedArchiver를 사용하여 이미지 데이터를 저장하고이 변환기를 사용하여 이미지 데이터를 검색하는 전략은 성공적이었습니다. – jcady
나는 하나의 바인딩에 대해 뭔가를 기억하고 있으므로 다른 바인딩을 대신 사용하십시오 ... 값 바인딩입니까? 이 바인딩을 사용하여 이것을 사용할 수도 있습니다. 필요한 경우 모든 객체를 반환하는 데 필요한만큼 변환기를 수정하지 않는 것이 좋습니다. – regulus6633