2013-01-19 14 views
0

我嘗試添加NSDateNSMutableDictionary,然後使它成爲一個JSon字符串,這個方法:無法序列的NSDate與CJJsonSerializer

NSMutableDictionary *d = [[NSMutableDictionary alloc]init]; 
[d setObject:[NSDate date] forKey:@"date"]; 
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:nil]; 
NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease]; 

,我有幾個問題: 1)jsondata爲零,然後requestBody也是零。 2)[NSDate date]讓我錯了日期,而不是像在約會我的iPhone:

2013-01-19 11:48:46 +0000 

這個問題的任何幫助嗎?

編輯:

當我打印我得到這個味精的錯誤:

Error Domain=TODO_DOMAIN Code=-1 "Cannot serialize data of type '__NSDate'" UserInfo=0x177850 {NSLocalizedDescription=Cannot serialize data of type '__NSDate'} 

這是不可能做到這一點?

+1

如果出現問題,檢查「error」參數設置的內容很有用。你通過'無';嘗試將引用傳遞給一個'NSError *'變量(即'NSError * e = nil',然後將'&e'傳遞給錯誤參數),然後查看它後面設置的內容。關於你的第二個問題,它是[這個問題]的重複(http://stackoverflow.com/questions/4976530/returns-a-date-an-hour-in-the-future)。 –

+0

我編輯我的文章更多信息..... – MTA

回答

4

字典似乎不太可能插入日期。看起來問題更可能是CJSONSerializer

嘗試以下操作:

NSMutableDictionary *d = [[NSMutableDictionary alloc]init]; 
[d setObject:[NSDate date] forKey:@"date"]; 

NSError *error = nil; 
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:&error]; 

if (!jsonData) 
{ 
    NSLog(@"Error %@ while serialising to JSON"); 
} 

NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease]; 

您應該看到打印到控制檯的錯誤。

UPDATE

OK,所以看起來我們是正確的,並且CJSONSerializer不能連載日期。所以你需要把你的日期變成一個字符串。這是用NSDateFormatter完成的。

NSMutableDictionary *d = [[NSMutableDictionary alloc]init]; 
NSDate *date = [NSDate date]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"]; 
NSString *dateString = [dateFormatter stringFromDate:date]; 

[d setObject:dateString forKey:@"date"]; 

NSError *error = nil; 
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:&error]; 

if (!jsonData) 
{ 
    NSLog(@"Error %@ while serialising to JSON"); 
} 

NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease]; 

希望你現在應該在你的JSON中獲得格式化的日期。您可以通過更改您傳遞給stringWithDate:的字符串來改變格式。如果你這樣做了很多,你會希望一個日期格式化器創建它們是很昂貴的。

+0

我編輯我的文章更多信息..... – MTA

0

JSON不支持日期作爲標準類型,所以沒有自動的方式來序列化NSDate。您必須傳遞日期的字符串表示形式或數字時間戳表示形式。例如,您可以通過執行以下操作將其序列化爲時間戳:

[d setObject:@([[NSDate date] timeIntervalSince1970]) forKey:@"date"]