我是iOS开发的新手,我正在尝试在RestKit中进行一些自定义值转换,但我无法弄清楚如何做到这一点。我有两个当前的问题:
我有一个base64编码的图像,它从服务器返回JSON消息。它采用以下格式。我使用Core Data作为后端持久存储,'image'字段作为二进制数据(NSData)存储在Core Data中。当RestKit将base64编码的图像转换为NSData对象时,出现问题,因为存储在sqllite数据库中的图像字节不正确,我无法重新显示图像。
"images": [{
"id": 1,
"recordId": 1,
"status": "C",
"type": "MUGSHOT",
"format": "JPEG",
"width": 50,
"height": 50,
"image": "/9j/4AAQSkZJRgABAQEBLAEsAA....",
"createBy": "blah",
"createDt": 1395683191483,
"captureDevice": null
}]
经过大量的谷歌搜索,我发现RKValueTransformer将允许我为不同的类设置自定义转换(在我的情况下,我想为NSDate和NSData类设置自定义转换器。但是,RKBlockValueTransformer类是这里引用的(https://github.com/RestKit/RestKit/wiki/Object-Mapping)在“自定义值转换”部分下似乎不存在。我使用RestKit .20.3并使用CocoaPods使用此Podfile安装它:
platform :ios, '7.0'
pod 'RestKit', '~> 0.20.3'
我尝试添加pod'RKValueTransformers','〜> 1.0.0'到我的Podfile,但这导致了一些编译器问题。另外,RKValueTransformers project只是RestKit中内置的值转换功能的摘录吗?
我是否正确使用RKValueTransformer来获取我正在寻找的NSDate和NSData行为?如果是这样,我需要做些什么才能将它包含在我的项目中?有没有更简单的方法让我的应用程序正确处理存储在Core Data中的base64编码图像作为二进制字段?
编辑:这是我的Pods项目中的RKValueTransformers.h和.m文件。它似乎只与日期格式化程序相关:
答案 0 :(得分:1)
如果您要将图像数据存储在核心数据中,您应该考虑勾选“允许外部存储”#39;选项。
您想要的值转换器是将NSString
转换为NSData
,您需要在中间使用base64。您需要创建一个符合< RKValueTransforming >
的类。由于您要从NSString
进行转换,因此您应该实施validateTransformationFromClass:toClass:
,这样您就可以拒绝任何有效目标不是NSData
的转化。
一旦您创建了您的类及其实例(imageFormatter
),请将其安装为:
[[RKValueTransformer defaultValueTransformer] insertValueTransformer:imageFormatter atIndex:0];
并且相同的过程适用于日期格式化程序。