1

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

问题是我不能使用Datawith ,NSArchiveFromData因为它已被弃用。

我的问题与类似,但我不太明白答案。

有人有想法吗?

谢谢

4

2 回答 2

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];
    }
}

然后在您已在图像上设置绑定的界面生成器中,只需将值转换器设置为您创建的类。

于 2013-01-25T15:19:09.833 回答
0

你没有定义你的问题到底是什么。

要从 NSData 加载 NSImage,请参阅Apple 文档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 - 检查另一个答案。

于 2013-01-23T23:47:48.550 回答