我有JSON,其中包含我添加到Core Data的base64解码的PNG图像。我想在Image Wells中显示这些图像,并绑定到我的Core Data模型。
问题是我不能将Data
与NSArchiveFromData
一起使用,因为它已被弃用。
我的问题与this相似,但我并不理解答案。
有没有人有想法?
由于
答案 0 :(得分:1)
尝试一下这个效果(我不确定你是只是在属性上使用绑定,还是使用NSArrayController - 我会尝试回答这两种情况)
您可以从json中获取字符串并对其进行解码: (您将需要stackoverflow中引用的开源库答案:https://stackoverflow.com/questions/14260936/decode-an-encoded-base64-image-in-c-sharp-in-objective-c)
NSString *jsonImage = [jsonData objectForKey@"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];
}
}
然后在界面构建器中,您已在图像上设置绑定,只需将Value Transformer设置为您创建的类。
答案 1 :(得分:0)
你没有确定你的问题究竟是什么。
要从NSData加载NSImage,请参阅Apple docs和initWithData:
。
假设你有这样的核心数据对象:
@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;
}
另外,通知绑定更改imageData属性时的更改:
+ (NSSet *)keyPathsForValuesAffectingImageData {
return [NSSet setWithObjects:@"bindableImage", nil];
}
就是这样。我认为,它应该有效,但我没有尝试:)
我忘了Base64 - 检查另一个答案。