Come indicato, è necessario prima convertire il NSDate in NSString. Tuttavia, non è immediatamente chiaro quale formato debba essere rappresentato nella data. La risposta può essere trovata here: "JSON stesso non specifica come devono essere rappresentate le date, ma Javascript lo fa" - ISO8601.
Ecco un metodo di conversione ISO8601 da una categoria di supporto per NSDate, cortesia Erica Sadun:
- (NSString *)ISO8601 {
struct tm time;
time_t interval = [self timeIntervalSince1970];
gmtime_r(&interval, &time);
char *x = calloc(1, 21);
strftime_l(x, 20, "%FT%TZ", &time, gmtlocale);
NSString *string = [NSString stringWithUTF8String:x];
free(x);
return string;
}
Se si ottiene una stringa ISO8601 nuovo in un carico utile JSON e volete convertirlo in un NSDate, utilizzare questa classe metodo per NSDate:
+ (NSDate *)dateFromISO8601:(NSString *)string {
if(!string) return nil;
if (![string isKindOfClass:[NSString class]]) return nil;
struct tm time;
strptime_l([string UTF8String], "%FT%TZ", &time, gmtlocale);
return [NSDate dateWithTimeIntervalSince1970:timegm(&time)];
}
Questo non ha senso. L'OP sta chiedendo come ** codificare ** un NSDate. Ciò significa che devono convertire NSDate in un NSString prima di inserirlo nel dizionario che stanno tentando di codificare JSON. La mia risposta qui sotto mostra una soluzione di esempio. – sumizome
non è una buona soluzione. è solo un by-pass. Devo sapere come farlo funzionare con NSDate stesso o, in caso contrario, perché questo sta accadendo. – Nishant