我在将核心数据托管对象序列化为 JSON 对象时遇到问题。我正在使用 Mantle 来执行此操作,这是相关的NSDate
。我收到这个错误。
'Invalid type in JSON write (__NSDate)'
这是引发此异常的地方。直到代码行 4 (NSDictionary *jDict ....)
//NSManagedObject from Core Data
Memo *newMemo = [self fetchMemo:memo.uuid];
NSError *errorMantle;
//MTLModel model
BSMemo *memooo = [MTLManagedObjectAdapter modelOfClass:[BSMemo class] fromManagedObject:newMemo error:&errorMantle];
NSDictionary *jDict = [MTLJSONAdapter JSONDictionaryFromModel:memooo];
//Serialising using NSJSONSerialization
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jDict options:NSJSONWritingPrettyPrinted error:&error];
这就是我格式化NSDate
inMTLModel
+ (NSValueTransformer *)dateJSONTransformer {
static dispatch_once_t onceToken;
static NSDateFormatter *dateFormatter;
dispatch_once(&onceToken, ^{
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];
});
return [MTLValueTransformer transformerWithBlock:^id(NSString *string) {
return [dateFormatter dateFromString:string];
}];
}
+ (NSValueTransformer *)createdJSONTransformer {
return [self dateJSONTransformer];
}
JSON 解析很好,只有在尝试从核心数据生成 JSON 字符串时才会发生这种情况。我尝试过不同的日期格式。但没有运气。你能帮我解决这个问题吗?
更新块
+ (NSValueTransformer *)dateJSONTransformer {
__block dispatch_once_t onceToken;
__block NSDateFormatter *dateFormatter;
dispatch_once(&onceToken, ^{
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];
});
return [MTLValueTransformer transformerWithBlock:^id(NSString *string) {
return [dateFormatter dateFromString:string];
}];
}
我正在从 Rest JSON API 下载一些数据并保存到核心数据中。因为我的应用程序必须离线工作。当尝试将数据推送回服务器时,我需要将核心数据转换为 JSON 并附加 HTTP POST。所以我使用 Mantle 来简化这个过程。