带有核心数据绑定的Base64 png

时间:2013-01-23 14:57:26

标签: core-data base64 cocoa-bindings nsimageview

我有JSON,其中包含我添加到Core Data的base64解码的PNG图像。我想在Image Wells中显示这些图像,并绑定到我的Core Data模型。

问题是我不能将DataNSArchiveFromData一起使用,因为它已被弃用。

我的问题与this相似,但我并不理解答案。

有没有人有想法?

由于

2 个答案:

答案 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 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;
}

另外,通知绑定更改imageData属性时的更改:

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

就是这样。我认为,它应该有效,但我没有尝试:)


我忘了Base64 - 检查另一个答案。