0

に追加NSDateしてからNSMutableDictionary、次のJSonメソッドを使用して文字列にします。

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は nil であり、その後もrequestBodynil です。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'}

それはできませんか?

4

2 に答える 2

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];

コンソールに出力されたエラーが表示されます。

アップデート

わかりました。これは正しかったようです。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:。これを頻繁に行う場合、作成にはコストがかかるため、単一の日付フォーマッターが必要になります。

于 2013-01-19T12:02:35.173 に答える
0

JSON は標準型として日付をサポートしていないため、NSDate. 日付の文字列表現、またはタイムスタンプの数値表現を渡す必要があります。たとえば、次のようにしてタイムスタンプとしてシリアル化できます。

[d setObject:@([[NSDate date] timeIntervalSince1970]) forKey:@"date"]
于 2013-01-19T12:16:00.987 に答える