RestKit 无法将 JSON 请求中格式为字符串的日期保存到我的本地数据库
Posted
技术标签:
【中文标题】RestKit 无法将 JSON 请求中格式为字符串的日期保存到我的本地数据库【英文标题】:RestKit can't save dates that are formatted as strings in JSON-request to my local database 【发布时间】:2012-06-21 18:33:02 【问题描述】:我正在使用 RestKit 将 JSON 同步到本地数据库,但在保存日期时遇到了一些问题,我不断收到 Category is not key value coding-compliant for the key "createdAt".
我从远程 Web 服务获得的 JSON 是一个字符串,看起来像这样:
"created_at":"2012-06-20T13:29:54Z"
在我的本地 xdatamodeld
文件中,我尝试使用 created_at
属性,我尝试将 NSSTring 和 NSdate 作为数据类型。我有一个带有 created_at @property:@property (nonatomic, retain) NSDate *createdAt;
的实体的本地模型文件。我也在这里尝试过 NSString 和 NSDate 。我也尝试为RKManagedObjectMapping
创建一个日期格式化程序,但它也没有帮助。像这样:
NSDateFormatter* dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
categoryMapping.dateFormatters = [NSArray arrayWithObject: dateFormatter];
我的映射如下所示:
[categoryMapping mapKeyPath:@"categories.created_at" toAttribute:@"createdAt"];
关于我做错了什么有什么想法吗?
** 更新 **
我怀疑是 Z 导致了错误。在映射请求之前,我如何才能将其从请求中剥离出来?
** 更新 #2 **
我现在也尝试添加一个新的 addDefaultDateFormatter,但没有奏效。像这样(在我创建自己的映射之前):
// JSON date format: 2012-06-20T13:29:54Z
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
[RKObjectMapping addDefaultDateFormatterForString:@"yyyy-MM-dd'T'HH:mm:ssZ" inTimeZone:nil];
[RKObjectMapping addDefaultDateFormatter:dateFormatter];
【问题讨论】:
【参考方案1】:两件事。
1) 您报告的错误与日期格式无关,它只是表示该实体没有名为 createdAt 的属性/属性。检查您的地图是否映射到正确的对象,并且您的对象实际上具有正确的属性。
2) 您的日期格式化程序错误。它应该具有以下格式:
yyyy-MM-dd'T'HH:mm:ss'Z'
但这已经是 RestKit 的默认日期格式化程序之一,因此您不需要指定它。顺便说一下,这是 ISO8601 格式(即:标准日期)。
【讨论】:
谢谢,你是对的,是我的映射和数据模型错了。以上是关于RestKit 无法将 JSON 请求中格式为字符串的日期保存到我的本地数据库的主要内容,如果未能解决你的问题,请参考以下文章
JSONKit(在 RestKit 中)将 JSON 转换为 NSArray