2012-08-06 46 views
1

所以我很高興地使用JSON和setValuesForKeysWithDictionary將數據鎖入我的系統,直到遇到具有NSDate屬性的對象。問題使用setValuesForKeysWithDictionary和JSON設置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的使用,因爲它很快變得很快。

回答

1

我假設你使用的是核心數據(因爲核心數據產生你發佈的錯誤),並且你的實體有一個名爲「BackOrderDate」類型爲「Date」的屬性。

問題是JSON沒有「Date」數據類型。在你的.NET代碼中,你通過告訴JSON序列化來將日期轉換爲IS格式的字符串來處理這個問題。

在將數據傳遞給setValuesForKeysWithDictionary:之前,當您解析iOS應用程序中的JSON數據時,您需要執行相反的轉換。

您可以使用NSDateFormatter將字符串解析爲NSDate,並且您可以在Web上輕鬆找到很多示例。

在調用setValuesForKeysWithDictionary:之前如何執行解析取決於您使用的是解析JSON的內容。

如果您使用Apple的NSJSONSerialization,則應該使用NSJSONReadingMutableContainers選項。然後進入詞典並在調用setValuesForKeysWithDictionary:之前用NSDate對象替換日期字符串。

如果您使用的是其他JSON解析器(如SBJSON),我不知道進行替換的最佳方法。

+1

下面是一個很好的替代解決方案:http://www.cimgf.com/2011/06/02/saving-json-to-core-data/ – Slee 2012-08-08 19:51:14