所以我很高兴地使用 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 的使用,因为它太他妈快了。
最佳答案
我假设您正在使用 Core Data(因为 Core Data 会产生您发布的错误)并且您的实体有一个名为“BackOrderDate”且类型为“Date”的属性。
问题是 JSON 没有“日期”数据类型。在您的 .NET 代码中,您已通过告知 JSON 序列化将日期转换为 IS 格式的字符串来处理此问题。
在将数据传递给 setValuesForKeysWithDictionary:
之前,您需要在 iOS 应用中解析 JSON 数据时执行相反的转换。
您可以使用 NSDateFormatter
将字符串解析为 NSDate
,您可以轻松地在网络上找到很多这样的示例。
在调用 setValuesForKeysWithDictionary:
之前执行解析的方式取决于您使用什么来解析 JSON。
如果您正在使用 Apple 的 NSJSONSerialization
,您可能应该使用 NSJSONReadingMutableContainers
选项。然后进入字典并在调用 setValuesForKeysWithDictionary:
之前用 NSDate
对象替换日期字符串。
如果您使用其他一些 JSON 解析器(如 SBJSON),我不知道进行替换的最佳方法。
关于ios - 使用 setValuesForKeysWithDictionary 和 JSON 设置 NSDate 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836205/