NSObject+MJKeyValue.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. //
  2. // NSObject+MJKeyValue.h
  3. // MJExtension
  4. //
  5. // Created by mj on 13-8-24.
  6. // Copyright (c) 2013年 小码哥. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "MJExtensionConst.h"
  10. #import <CoreData/CoreData.h>
  11. #import "MJProperty.h"
  12. /**
  13. * KeyValue协议
  14. */
  15. @protocol MJKeyValue <NSObject>
  16. @optional
  17. /**
  18. * 只有这个数组中的属性名才允许进行字典和模型的转换
  19. */
  20. + (NSArray *)mj_allowedPropertyNames;
  21. /**
  22. * 这个数组中的属性名将会被忽略:不进行字典和模型的转换
  23. */
  24. + (NSArray *)mj_ignoredPropertyNames;
  25. /**
  26. * 将属性名换为其他key去字典中取值
  27. *
  28. * @return 字典中的key是属性名,value是从字典中取值用的key
  29. */
  30. + (NSDictionary *)mj_replacedKeyFromPropertyName;
  31. /**
  32. * 将属性名换为其他key去字典中取值
  33. *
  34. * @return 从字典中取值用的key
  35. */
  36. + (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName;
  37. /**
  38. * 数组中需要转换的模型类
  39. *
  40. * @return 字典中的key是数组属性名,value是数组中存放模型的Class(Class类型或者NSString类型)
  41. */
  42. + (NSDictionary *)mj_objectClassInArray;
  43. /**
  44. * 旧值换新值,用于过滤字典中的值
  45. *
  46. * @param oldValue 旧值
  47. *
  48. * @return 新值
  49. */
  50. - (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property;
  51. /**
  52. * 当字典转模型完毕时调用
  53. */
  54. - (void)mj_keyValuesDidFinishConvertingToObject;
  55. /**
  56. * 当模型转字典完毕时调用
  57. */
  58. - (void)mj_objectDidFinishConvertingToKeyValues;
  59. @end
  60. @interface NSObject (MJKeyValue) <MJKeyValue>
  61. #pragma mark - 类方法
  62. /**
  63. * 字典转模型过程中遇到的错误
  64. */
  65. + (NSError *)mj_error;
  66. /**
  67. * 模型转字典时,字典的key是否参考replacedKeyFromPropertyName等方法(父类设置了,子类也会继承下来)
  68. */
  69. + (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference;
  70. #pragma mark - 对象方法
  71. /**
  72. * 将字典的键值对转成模型属性
  73. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  74. */
  75. - (instancetype)mj_setKeyValues:(id)keyValues;
  76. /**
  77. * 将字典的键值对转成模型属性
  78. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  79. * @param context CoreData上下文
  80. */
  81. - (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context;
  82. /**
  83. * 将模型转成字典
  84. * @return 字典
  85. */
  86. - (NSMutableDictionary *)mj_keyValues;
  87. - (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys;
  88. - (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys;
  89. /**
  90. * 通过模型数组来创建一个字典数组
  91. * @param objectArray 模型数组
  92. * @return 字典数组
  93. */
  94. + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray;
  95. + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys;
  96. + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys;
  97. #pragma mark - 字典转模型
  98. /**
  99. * 通过字典来创建一个模型
  100. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  101. * @return 新建的对象
  102. */
  103. + (instancetype)mj_objectWithKeyValues:(id)keyValues;
  104. /**
  105. * 通过字典来创建一个CoreData模型
  106. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  107. * @param context CoreData上下文
  108. * @return 新建的对象
  109. */
  110. + (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context;
  111. /**
  112. * 通过plist来创建一个模型
  113. * @param filename 文件名(仅限于mainBundle中的文件)
  114. * @return 新建的对象
  115. */
  116. + (instancetype)mj_objectWithFilename:(NSString *)filename;
  117. /**
  118. * 通过plist来创建一个模型
  119. * @param file 文件全路径
  120. * @return 新建的对象
  121. */
  122. + (instancetype)mj_objectWithFile:(NSString *)file;
  123. #pragma mark - 字典数组转模型数组
  124. /**
  125. * 通过字典数组来创建一个模型数组
  126. * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString)
  127. * @return 模型数组
  128. */
  129. + (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray;
  130. /**
  131. * 通过字典数组来创建一个模型数组
  132. * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString)
  133. * @param context CoreData上下文
  134. * @return 模型数组
  135. */
  136. + (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context;
  137. /**
  138. * 通过plist来创建一个模型数组
  139. * @param filename 文件名(仅限于mainBundle中的文件)
  140. * @return 模型数组
  141. */
  142. + (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename;
  143. /**
  144. * 通过plist来创建一个模型数组
  145. * @param file 文件全路径
  146. * @return 模型数组
  147. */
  148. + (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file;
  149. #pragma mark - 转换为JSON
  150. /**
  151. * 转换为JSON Data
  152. */
  153. - (NSData *)mj_JSONData;
  154. /**
  155. * 转换为字典或者数组
  156. */
  157. - (id)mj_JSONObject;
  158. /**
  159. * 转换为JSON 字符串
  160. */
  161. - (NSString *)mj_JSONString;
  162. @end
  163. @interface NSObject (MJKeyValueDeprecated_v_2_5_16)
  164. - (instancetype)setKeyValues:(id)keyValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  165. - (instancetype)setKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  166. - (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  167. - (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  168. + (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  169. - (NSMutableDictionary *)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  170. - (NSMutableDictionary *)keyValuesWithError:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  171. - (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  172. - (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  173. - (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  174. - (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  175. + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  176. + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  177. + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  178. + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  179. + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  180. + (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  181. + (instancetype)objectWithKeyValues:(id)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  182. + (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  183. + (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  184. + (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  185. + (instancetype)objectWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  186. + (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  187. + (instancetype)objectWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  188. + (instancetype)objectWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  189. + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  190. + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  191. + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  192. + (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  193. + (NSMutableArray *)objectArrayWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  194. + (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  195. + (NSMutableArray *)objectArrayWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  196. + (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  197. - (NSData *)JSONData MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  198. - (id)JSONObject MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  199. - (NSString *)JSONString MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
  200. @end