我是 iOS 开发新手,正在尝试在 RestKit 中进行一些自定义值转换,但我不知道该怎么做。我目前有两个问题:
我有一个 base64 编码的图像,它以 JSON 消息从服务器返回。它采用以下格式。我使用 Core Data 作为后端持久存储,并且“图像”字段作为二进制数据 (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 日期以 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 project吗?只是 RestKit 中已经内置的值(value)转换功能的一部分?
使用 RKValueTransformer 获取我正在寻找的 NSDate 和 NSData 行为,我是否走在正确的道路上?如果是这样,我该怎么做才能将其包含在我的项目中?有没有更简单的方法可以让我的应用程序正确处理以二进制字段形式存储在 Core Data 中的 base64 编码图像?
编辑:这是我的 Pods 项目中的 RKValueTransformers.h 和 .m 文件。它似乎仅与日期格式化程序相关:
Best Answer-推荐答案 strong>
如果您在 Core Data 中存储图像数据,您应该考虑勾选“允许外部存储”选项。
您想要的值转换器是将 NSString 转换为 NSData 并且您需要在中间使用base64。您需要创建一个符合< RKValueTransforming > 的类。因为您是从 NSString 进行转换,所以您应该实现 validateTransformationFromClass:toClass: 以便您可以拒绝任何目标不是 NSData 有效的转换。
一旦你创建了你的类并在它的实例中(imageFormatter ),安装它:
[[RKValueTransformer defaultValueTransformer] insertValueTransformer:imageFormatter atIndex:0];
同样的过程也适用于日期格式化程序。
关于ios - RestKit .20.x 值(value)转换,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/22619827/
|