NSInvalidArgumentException, reason: 'Invalid type in JSON write (__NSDate)'

前端 未结 8 2164
南旧
南旧 2021-02-04 01:05

I\'m getting this exception when I try to JSON encode NSDate object.I believe NSDate is not compatible for JSON encoding. but I must encode the date.Any solutions?



        
8条回答
  •  迷失自我
    2021-02-04 01:17

    As noted, you must first convert your NSDate to an NSString. It's not immediately clear, however, which format the date should be represented in. The answer can be found here: "JSON itself does not specify how dates should be represented, but Javascript does" -- ISO8601.

    Here is an ISO8601 conversion method from a helper category for NSDate, courtesy 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;
    }
    

    If you get an ISO8601 string back in a JSON payload and want to convert it to an NSDate, use this class method for 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)];
    }
    

提交回复
热议问题