所以我很高兴使用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
我正在使用JSON.NET和MVC以及以下设置:
JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter());
string json = JsonConvert.SerializeObject(objects, Formatting.None, serializerSettings);
return Content(json);
有关如何处理此问题的任何想法?我不想失去setValuesForKeysWithDictionary的使用,因为它非常快速。
答案 0 :(得分:1)
我假设您正在使用Core Data(因为Core Data会产生您发布的错误),并且您的实体有一个名为“BackOrderDate”的属性,类型为“Date”。
问题是JSON没有“Date”数据类型。在您的.NET代码中,您通过告诉JSON序列化将日期转换为IS格式的字符串来处理此问题。
在将数据传递给setValuesForKeysWithDictionary:
之前,在解析iOS应用中的JSON数据时,需要执行相反的转换。
您可以使用NSDate
将字符串解析为NSDateFormatter
,并且您可以在网络上轻松找到大量示例。
如何在调用setValuesForKeysWithDictionary:
之前执行解析取决于您使用解析JSON的内容。
如果您使用的是Apple的NSJSONSerialization
,则应该使用NSJSONReadingMutableContainers
选项。然后进入字典并用NSDate
对象替换日期字符串,然后再调用setValuesForKeysWithDictionary:
。
如果你正在使用其他一些JSON解析器(比如SBJSON),我不知道更换的最佳方法。