你如何在 RestKit 0.20 中使用 RKDotNetDateFormatter?

Posted

技术标签:

【中文标题】你如何在 RestKit 0.20 中使用 RKDotNetDateFormatter?【英文标题】:How do you use the RKDotNetDateFormatter in RestKit 0.20? 【发布时间】:2013-05-17 14:51:35 【问题描述】:

我从 .NET 服务返回一个 JSON 对象,该对象的日期格式如下:/Date(1368825702750-0500)/

我需要能够将该格式反序列化为 NSDate,然后使用不同的格式显示 NSDate。

我正在使用 RestKit,但我似乎不知道如何告诉它使用正确的日期格式化程序。我知道有一个 RKDotNetDateFormatter,但我不知道如何正确使用它。我在其他网站上看到的大多数示例都使用了当前版本的 RestKit 中不再存在的方法和类。目前,我正在尝试如下设置:

RKDotNetDateFormatter *formatter = [RKDotNetDateFormatter dotNetDateFormatterWithTimeZone:[NSTimeZone systemTimeZone]];
[RKObjectMapping addDefaultDateFormatter:formatter];
[RKObjectMapping setPreferredDateFormatter:formatter];

此时我将我的 JSON 作为字符串,所以我正在执行以下操作来反序列化它:

MyDisplayEntity *infoMapped = [[MyDisplayEntity alloc] init];

RKMappingOperation* mapper = [[RKMappingOperation alloc] initWithSourceObject:object destinationObject:infoMapped mapping:[MyDisplayEntity responseMapping]];
mapper.dataSource = object;
[mapper performMapping:&error];

除了我的 NSDates 之外,一切似乎都被正确映射了。

有没有人举例说明如何正确反序列化这种格式?

【问题讨论】:

【参考方案1】:

您还可以直接在对象映射上配置日期和时间的处理方式(尽管您显示的全局设置也应该有效)。

dateFormatters 属性设置为您的RKDotNetDateFormatter *formatter(在一个数组中)。

打开跟踪日志记录以获取有关映射过程的更多详细信息也可能会有所帮助:

RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);

【讨论】:

【参考方案2】:

在深入研究源代码后,我发现当我使用标准的服务检索方法时,它似乎并不关心您到目标实体的映射是否完全正确。然而,使用 RKMappingOperation 需要它们的大小写完全正确。

看起来这是用户错误:P

【讨论】:

【参考方案3】:

首先声明你的日期格式化对象

var dateFormater = RKDotNetDateFormatter()

将此日期格式化程序添加到您的 defaultValueTransformer() 和您的特定 RKEntityMapping/RKObjectMapping

RKValueTransformer.defaultValueTransformer().addValueTransformer(dateFormater)
btaMapping.valueTransformer = RKValueTransformer.defaultValueTransformer()

【讨论】:

以上是关于你如何在 RestKit 0.20 中使用 RKDotNetDateFormatter?的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 0.20:在 JSON 中使用动态扁平化层次结构

如何在 RestKit 0.20 中实现`hasOne:withMapping:`?

在 restKit 0.20 中删除孤立对象

从 RestKit 0.10 更新到 0.20

使用 RestKit 0.20 的对象映射关系

Restkit 0.20:在自己的静态库中构建存档时找不到