2013-01-23 49 views
1

我有JSON包含base64解碼PNG圖像,我添加到核心數據。我想在Image Wells中將這些圖像與我的Core Data模型綁定。Base64 PNG與核心數據綁定

問題是我不能使用DataNSArchiveFromData,因爲它已被棄用。

我的問題與this類似,但我並不真正瞭解答案。

有沒有人有想法?

謝謝

回答

1

嘗試的東西這樣的效果(我不知道如果你只是使用上的屬性綁定,或使用一個NSArrayController - 我會試着回答這兩個方案)

你可以採取從您的JSON字符串和解碼它: (你需要在計算器的回答中引用的開源庫:https://stackoverflow.com/questions/14260936/decode-an-encoded-base64-image-in-c-sharp-in-objective-c

NSString *jsonImage = [jsonData [email protected]"image"]; 
NSData *data  = [NSData dataWithBase64EncodedString:jsonImage]; 

然後用這些數據初始化你的形象。

如果您使用NSArrayController來管理核心數據,請創建一個返回圖像的值轉換器。

創建一個NSValueTransformer的子類並根據需要命名。在實施中,添加:

+(Class)transformedValueClass { 
    return [NSImage class]; 
} 
-(id)transformedValue:(id)value { 
    if (value == nil) { 
     return nil; 
    } else { 
     NSData *data = [NSData dataWithBase64EncodedString:value]; //might be [value stringValue] 
     return [[NSImage alloc] initWithData:data]; 
    } 
} 

然後在您設定的圖像上的結合界面生成器,只需設置值轉換到您所做的類。

+0

謝謝!我會盡快實施它(今晚晚些時候)。是的,我使用NSArrayController。將嘗試它,然後你可以兌現:) – Mikael

+0

積分花費了!謝謝! – Mikael

+0

很高興工作! – macandyp

0

您沒有定義到底是什麼問題。

要從NSData加載NSImage,請參閱Apple docsinitWithData:


比方說,你有這樣的核心數據對象:

@class MyObject : NSManagedObject 

@property NSData *imageData; 

@end 

和它的實現:

@implementation MyObject 

@dynamic imageData; 

@end 

現在,還要加上一個新的屬性:

-(NSImage *)bindableImage { 
    [self willAccessValueForKey:@"bindableImage"]; 
    NSImage *myImage = [[NSImage alloc] initWithData:[self imageData]]; 
    [self didAccessValueForKey:@"bindableImage"]; 
    return myImage; 
} 

同樣,通知綁定圖像時會發生什麼變化數據屬性已更改:

+ (NSSet *)keyPathsForValuesAffectingImageData { 
    return [NSSet setWithObjects:@"bindableImage", nil]; 
} 

就是這樣。我認爲,它應該工作,但我沒有嘗試:)


我忘了Base64編碼 - 檢查另一個答案。

+0

問題是我想用綁定來做到這一點,我不知道如何用Base64編碼的圖像做到這一點。 – Mikael