2010-05-19 153 views
0

在我的代碼中,我將圖像存儲到我的核心數據模型(工作正常)。如果我設置我的視圖有一個NSImageView並將其數據綁定到控制器鍵:選擇和modelKeyPath:myImagePath,它的工作原理。它將顯示選定行的每個圖像。核心數據圖像不會加載到NSTableView圖像單元

然後,在我的NSTableView中創建一個新列,然後將圖像單元拖到列上。但是,我無法讓我的Core Data綁定將圖像顯示在單元格中。我嘗試綁定價值和數據,但沒有運氣。

由於我確信圖像存儲正確,我在做什麼我的綁定錯誤,以防止圖像顯示在表格單元格?

非常感謝。

(我的背景:新的可可開發商誰最近在整個Hillegass書了)

回答

2

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

+0

謝謝,這工作!唯一的問題是,我通過將數據綁定到NSTableColumn來獲得不推薦的警告。但是,使用NSKeyedArchiver保存圖像數據並使用該變換器檢索圖像數據的策略是成功的。 – jcady 2010-05-19 16:41:12

+0

我記得有關綁定的一個被棄用,所以使用其他綁定,而不是...是它的價值綁定?你也可以使用這個綁定,如果不是隻是根據需要修改變換器來返回任何需要的對象。 – regulus6633 2010-05-19 17:30:44

0

如果有人對使用Xcode 6的建議技術存在問題,我使用基於文檔的應用程序創建了一個Swift項目。使用ImageWell控件(NSImageView),綁定可以直接使用,而不需要變壓器。 雖然有一個細節,但是您將綁定在視圖本身的數據綁定上,而不是在它下面的ImageCell對象上。