RestKit .20.x值转换
我是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 }]
- createBy日期是自epoch以来的ms,它没有被正确转换为NSDate对象。 我知道它期望值以秒为单位,我认为这是导致问题的原因。
经过大量的谷歌搜索,我发现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项目是不是已经内置到RestKit中的值转换function的摘录?
我是否正确使用RKValueTransformer来获取我正在寻找的NSDate和NSData行为? 如果是这样,我需要做些什么才能将它包含在我的项目中? 有没有更简单的方法让我的应用程序正确处理存储在Core Data中的base64编码图像作为二进制字段?
编辑:这是我的Pods项目中的RKValueTransformers.h和.m文件。 它似乎只与日期格式化程序相关:
如果您将图像数据存储在Core Data中,您应该考虑勾选“允许外部存储”选项。
你想要的值转换器是将NSString
转换为NSData
,你需要在中间使用base64。 您需要创建一个符合< RKValueTransforming >
。 因为要从NSString
转换,所以应该实现validateTransformationFromClass:toClass:
这样就可以拒绝目标不是NSData
任何转换。
一旦您创建了类及其实例( imageFormatter
),请使用以下命令安装它:
[[RKValueTransformer defaultValueTransformer] insertValueTransformer:imageFormatter atIndex:0];
并且相同的过程适用于日期格式化程序。