使用 RestKit 映射时间

Posted

技术标签:

【中文标题】使用 RestKit 映射时间【英文标题】:Map time with RestKit 【发布时间】:2013-10-15 18:21:41 【问题描述】:

我有一个 ios 项目,它使用 RestKit 0.21.0 组件负责获取、解析和存储来自远程服务器的核心数据响应。在其中一个后端 JSON 响应中,我有类似的内容:

"response": [
  
    "id": 1,
    "start_time": "10:00:00",
    "end_time": "14:00:00",
    "name": "Object name"
  ,
  .
  .
  .
]

Model.xcdatamodeld 中,我已经定义了字段 startTime 和 endTime 类型为 Date 的实体。一般来说,所有对对象的映射 JSON 响应都能正常工作,但我对 JSON 字段 start_time 和 end_time 有问题。

您有什么建议可以正确地将时间字段映射到可以存储在 Core Data(SQLite 数据库)中的数据吗?

【问题讨论】:

【参考方案1】:

使用适当的格式创建一个NSDateFormatter 来解析您的时间字符串。使用[[RKValueTransformer defaultValueTransformer] insertValueTransformer:dateFormatter atIndex:0]; 添加日期格式化程序。现在,RestKit 将在需要映射到 NSDate 目标时搜索所有定义的日期格式化程序以及默认格式化程序。

【讨论】:

Wain,谢谢你的提示。我添加了 dateFormatter 但现在我得到了奇怪的结果。例如,字符串“12:00:00”在数据库中存储为 -24866870400,在 NSLog 中显示为 1213-01-01 00:00:00 +0000。所以这不是我所期望的。 我知道。在我已将 Model.xcdatamodeld 中的实体定义为 Date,在 SQLite 数据库模式中作为 TIMESTAMP 列可见。 是的,我明白了。我在问日期格式化程序。该日期的邮票应该是1357020000,所以有些东西不匹配。 好的,我已将我的 NSDateFormatter 设置为 [timeFormatter setDateFormat:@"HH:mm:ss"]; 在 index:0 添加你的应该使它优先于所有内置的转换器。尝试在 RKValueTransformers.m 中调试valueTransformersForTransformingFromClass【参考方案2】:

继承了一个广泛使用 RestKit 的应用程序,现在是 0.21 版本,它很棒。需要在 YYYY-MM-DD HH:MM:SS.SSS 中添加日期到字符串转换,并按照上面的建议将所需的日期格式化程序添加到索引 0 处的默认复合格式化程序。但是发现对 RKObjectMapping 的调用通过添加 ISO8601 覆盖了这一点为了在 +(void)initialize 中向后兼容,索引 0 处的格式化程序。评论了这些行,我得到了正确的结果。我想这可能是应用程序的结构方式,对 RKObjectMapping 的调用次数不限,如果不更改 RKObjectMapping,就不可能在正确的位置添加日期格式化程序。

【讨论】:

以上是关于使用 RestKit 映射时间的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 仅用于对象映射

RestKit:无法使用 coredata 执行映射

使用 RestKit 映射登录响应

RestKit 更新对象映射空属性

Restkit给出映射错误:

使用 managedObjectCache 时的 Restkit 映射