RestKit .20.x值转换

时间:2014-03-24 20:23:18

标签: ios core-data ios7 restkit restkit-0.20

我是iOS开发的新手,我正在尝试在RestKit中进行一些自定义值转换,但我无法弄清楚如何做到这一点。我有两个当前的问题:

  1. 我有一个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
    }]
    
  2. createBy日期是以纪元为单位的ms,它没有被正确转换为NSDate对象。我知道它期望值以秒为单位,我认为这是造成问题的原因。
  3. 经过大量的谷歌搜索,我发现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文件。它似乎只与日期格式化程序相关:RKValueTransformers

1 个答案:

答案 0 :(得分:1)

如果您要将图像数据存储在核心数据中,您应该考虑勾选“允许外部存储”#39;选项。

您想要的值转换器是将NSString转换为NSData,您需要在中间使用base64。您需要创建一个符合< RKValueTransforming >的类。由于您要从NSString进行转换,因此您应该实施validateTransformationFromClass:toClass:,这样您就可以拒绝任何有效目标不是NSData的转化。

一旦您创建了您的类及其实例(imageFormatter),请将其安装为:

[[RKValueTransformer defaultValueTransformer] insertValueTransformer:imageFormatter atIndex:0];

并且相同的过程适用于日期格式化程序。