我有 JSON,其中包含我添加到 Core Data 的 base64 解码的 PNG 图像。我想在 Image Wells 中显示这些图像,并绑定到我的核心数据模型。
问题是我不能使用Data
with ,NSArchiveFromData
因为它已被弃用。
我的问题与此类似,但我不太明白答案。
有人有想法吗?
谢谢
我有 JSON,其中包含我添加到 Core Data 的 base64 解码的 PNG 图像。我想在 Image Wells 中显示这些图像,并绑定到我的核心数据模型。
问题是我不能使用Data
with ,NSArchiveFromData
因为它已被弃用。
我的问题与此类似,但我不太明白答案。
有人有想法吗?
谢谢
尝试一些效果(我不确定你是只是在属性上使用绑定,还是使用 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];
}
}
然后在您已在图像上设置绑定的界面生成器中,只需将值转换器设置为您创建的类。
你没有定义你的问题到底是什么。
要从 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 - 检查另一个答案。