// // NSObject+MJKeyValue.h // MJExtension // // Created by mj on 13-8-24. // Copyright (c) 2013年 小码哥. All rights reserved. // #import #import "MJExtensionConst.h" #import #import "MJProperty.h" /** * KeyValue协议 */ @protocol MJKeyValue @optional /** * 只有这个数组中的属性名才允许进行字典和模型的转换 */ + (NSArray *)mj_allowedPropertyNames; /** * 这个数组中的属性名将会被忽略:不进行字典和模型的转换 */ + (NSArray *)mj_ignoredPropertyNames; /** * 将属性名换为其他key去字典中取值 * * @return 字典中的key是属性名,value是从字典中取值用的key */ + (NSDictionary *)mj_replacedKeyFromPropertyName; /** * 将属性名换为其他key去字典中取值 * * @return 从字典中取值用的key */ + (id)mj_replacedKeyFromPropertyName121:(NSString *)propertyName; /** * 数组中需要转换的模型类 * * @return 字典中的key是数组属性名,value是数组中存放模型的Class(Class类型或者NSString类型) */ + (NSDictionary *)mj_objectClassInArray; /** * 旧值换新值,用于过滤字典中的值 * * @param oldValue 旧值 * * @return 新值 */ - (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property; /** * 当字典转模型完毕时调用 */ - (void)mj_keyValuesDidFinishConvertingToObject; /** * 当模型转字典完毕时调用 */ - (void)mj_objectDidFinishConvertingToKeyValues; @end @interface NSObject (MJKeyValue) #pragma mark - 类方法 /** * 字典转模型过程中遇到的错误 */ + (NSError *)mj_error; /** * 模型转字典时,字典的key是否参考replacedKeyFromPropertyName等方法(父类设置了,子类也会继承下来) */ + (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference; #pragma mark - 对象方法 /** * 将字典的键值对转成模型属性 * @param keyValues 字典(可以是NSDictionary、NSData、NSString) */ - (instancetype)mj_setKeyValues:(id)keyValues; /** * 将字典的键值对转成模型属性 * @param keyValues 字典(可以是NSDictionary、NSData、NSString) * @param context CoreData上下文 */ - (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context; /** * 将模型转成字典 * @return 字典 */ - (NSMutableDictionary *)mj_keyValues; - (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys; - (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys; /** * 通过模型数组来创建一个字典数组 * @param objectArray 模型数组 * @return 字典数组 */ + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray; + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys; + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys; #pragma mark - 字典转模型 /** * 通过字典来创建一个模型 * @param keyValues 字典(可以是NSDictionary、NSData、NSString) * @return 新建的对象 */ + (instancetype)mj_objectWithKeyValues:(id)keyValues; /** * 通过字典来创建一个CoreData模型 * @param keyValues 字典(可以是NSDictionary、NSData、NSString) * @param context CoreData上下文 * @return 新建的对象 */ + (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context; /** * 通过plist来创建一个模型 * @param filename 文件名(仅限于mainBundle中的文件) * @return 新建的对象 */ + (instancetype)mj_objectWithFilename:(NSString *)filename; /** * 通过plist来创建一个模型 * @param file 文件全路径 * @return 新建的对象 */ + (instancetype)mj_objectWithFile:(NSString *)file; #pragma mark - 字典数组转模型数组 /** * 通过字典数组来创建一个模型数组 * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString) * @return 模型数组 */ + (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray; /** * 通过字典数组来创建一个模型数组 * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString) * @param context CoreData上下文 * @return 模型数组 */ + (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context; /** * 通过plist来创建一个模型数组 * @param filename 文件名(仅限于mainBundle中的文件) * @return 模型数组 */ + (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename; /** * 通过plist来创建一个模型数组 * @param file 文件全路径 * @return 模型数组 */ + (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file; #pragma mark - 转换为JSON /** * 转换为JSON Data */ - (NSData *)mj_JSONData; /** * 转换为字典或者数组 */ - (id)mj_JSONObject; /** * 转换为JSON 字符串 */ - (NSString *)mj_JSONString; @end @interface NSObject (MJKeyValueDeprecated_v_2_5_16) - (instancetype)setKeyValues:(id)keyValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (instancetype)setKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSMutableDictionary *)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSMutableDictionary *)keyValuesWithError:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithKeyValues:(id)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (instancetype)objectWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); + (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSData *)JSONData MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (id)JSONObject MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); - (NSString *)JSONString MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); @end