使用 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 映射时间的主要内容,如果未能解决你的问题,请参考以下文章