NSManagedObject
<-> NSDictionary
(例如JSON模型类)
将NSManagedObject转换为NSDictionary(及反向转换)。
pod 'ManagedMappingObject'
1 设置NSManagedObject类。
可以使用mogenerator轻松生成。
mogenerator -m ManagedMappingObject.xcdatamodeld -O CoreDataModels \
--base-class ManagedMappingObject \
--template-var arc=true
NSManagedObject
类必须是ManagedMappingObject
的子类。NSManagedObject
类必须实现<ManagedMappingProtocol>
.2 如果需要转换值,则创建NSValueTransformer
的子类。
UnitTransformer
在示例中。<ManagedMappingProtocol>
的+ (NSDictionary *)JSONValueTransformerNames
。例如:)
+ (NSDictionary *)JSONKeyMap {
return @{
UnitAttributes.identifier : @"id",
UnitAttributes.date : @"unix_time",
UnitAttributes.centimeter : @"meter"
};
}
+ (NSDictionary *)JSONValueTransformerNames {
return @{
UnitAttributes.centimeter : NSStringFromClass([MeterToCentimeterTransformer class]),
UnitAttributes.date : NSStringFromClass([UnixTimeToNSDateTransformer class])
};
}
+ (NSString *)entityName {
return [super entityName];
}
3 在设置后,您可以在NSManagedObject中使用以下方法。
// NSDictionary -> NSManagedObject
+ (instancetype)insertNewWithDictionary:(NSDictionary *) dictionary managedObjectContext:(NSManagedObjectContext *) context;
// update NSManagedObject
- (void)updateWithDictionary:(NSDictionary *) dictionary;
// NSManagedObject -> NSDictionary
- (NSDictionary *)dictionaryRepresentation;
注意:这些方法忽略了nil
。
示例
原始NSDictionary很难处理,因此此示例项目使用JSON Accelerator。
fooJSONModel
类具有以下有用方法:
- (instancetype)initWithDictionary:(NSDictionary *)dict;
- (NSDictionary *)dictionaryRepresentation;
git checkout -b my-new-feature
git commit -am '添加一些功能'
git push origin my-new-feature
MIT
感谢@ishkawa