コア データ管理オブジェクトを JSON オブジェクトにシリアライズする際に問題があります。私はこれを行うためにマントルを使用していますが、これは関連してい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
ですMTLModel
+ (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 を使用しています。