所以我很乐意使用JSON和setValuesForKeysWithDictionary将数据猛烈地输入我的系统,直到我遇到具有NSDate属性的对象。
JSON 包含以下格式的日期:
BackOrderDate: "2011-03-15T00:00:00"
这给了我一个错误:
'NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "BackOrderDate"; desired type = NSDate; given type = __NSCFString; value = 2011-03-15T00:00:00
我正在使用带有 MVC 的 JSON.NET 和以下设置:
JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter());
string json = JsonConvert.SerializeObject(objects, Formatting.None, serializerSettings);
return Content(json);
关于如何处理这个问题的任何想法? 我不想失去setValuesForKeysWithDictionary的使用,因为它跳得太快了。
我假设您使用的是核心数据(因为核心数据会产生您发布的错误(,并且您的实体具有一个名为"BackOrderDate"的属性,类型为"Date"。
问题是JSON没有"日期"数据类型。 在 .NET 代码中,已通过告诉 JSON 序列化将日期转换为 IS 格式的字符串来处理此问题。
在将数据传递给 setValuesForKeysWithDictionary:
之前,在 iOS 应用中解析 JSON 数据时,需要执行相反的转换。
您可以使用NSDateFormatter
将字符串解析为NSDate
,并且可以轻松地在网络上找到许多示例。
在调用 setValuesForKeysWithDictionary:
之前执行分析的方式取决于您使用的内容来分析 JSON。
如果您使用的是Apple的NSJSONSerialization
,则可能应该使用NSJSONReadingMutableContainers
选项。 然后进入字典并将日期字符串替换为 NSDate
对象,然后再调用 setValuesForKeysWithDictionary:
。
如果您使用的是其他JSON解析器(如SBJSON(,我不知道进行替换的最佳方法。