2010-05-19 5 views
0

내 코드에서 이미지를 내 핵심 데이터 모델 (잘 작동 함)에 저장하고 있습니다. 내 견해를 설정하여 NSImageView를 가지고 데이터를 Controller Key : selection 및 modelKeyPath : myImagePath에 바인딩하면 작동합니다. 선택한 행의 각 이미지가 표시됩니다.코어 데이터 이미지가 NSTableView 이미지 셀에로드되지 않음

그런 다음 내 NSTableView에 새 열을 만들고 열에 이미지 셀을 드래그하십시오. 그러나 이미지를 셀에 표시하도록 Core Data 바인딩을 가져올 수 없습니다. 나는 값과 데이터를 묶어 보았지만 행운은 없었다.

이미지가 제대로 저장되었다고 확신하기 때문에 이미지를 테이블 셀에 표시하지 못하게하기 위해 제 바인딩에서 잘못된 것은 무엇입니까?

고마워요.

(내 배경 :. 최근 전체 Hillegass의 책을 통해 간 새로운 코코아 개발자)

답변

2

나는 당신의 문제가 발생하는 일이 있지만 찾을 수있는 쉬운 방법이 무엇 확실하지 않다. 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이나 원하는 다른 방법을 사용할 수 있습니다.

+0

감사합니다. 유일한 문제는 데이터를 NSTableColumn에 바인딩하여 비추천 경고를 받고 있다는 것입니다. 그러나 NSKeyedArchiver를 사용하여 이미지 데이터를 저장하고이 변환기를 사용하여 이미지 데이터를 검색하는 전략은 성공적이었습니다. – jcady

+0

나는 하나의 바인딩에 대해 뭔가를 기억하고 있으므로 다른 바인딩을 대신 사용하십시오 ... 값 바인딩입니까? 이 바인딩을 사용하여 이것을 사용할 수도 있습니다. 필요한 경우 모든 객체를 반환하는 데 필요한만큼 변환기를 수정하지 않는 것이 좋습니다. – regulus6633

0

Xcode 6에서 제안한 기술에 문제가있는 사람은 누구나 문서 기반 응용 프로그램을 사용하여 Swift 프로젝트를 만들었습니다. ImageWell 컨트롤 (NSImageView)을 사용하면 바인딩이 변압기가 필요없는 값으로 직접 작동합니다. 자세한 내용은 그 아래의 ImageCell objet가 아닌보기 자체의 데이터 바인딩에 바인딩을 지정하십시오.

관련 문제