NSObject+MJKeyValue.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. + (id)mj_replacedKeyFromPropertyName121:(NSString *)propertyName;
  37. /**
  38. * 数组中需要转换的模型类
  39. *
  40. * @return 字典中的key是数组属性名,value是数组中存放模型的Class(Class类型或者NSString类型)
  41. */
  42. + (NSDictionary *)mj_objectClassInArray;
  43. /** 特殊地区在字符串格式化数字时使用 */
  44. + (NSLocale *)mj_numberLocale;
  45. /**
  46. * 旧值换新值,用于过滤字典中的值
  47. *
  48. * @param oldValue 旧值
  49. *
  50. * @return 新值
  51. */
  52. - (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property;
  53. /**
  54. * 当字典转模型完毕时调用
  55. */
  56. - (void)mj_keyValuesDidFinishConvertingToObject MJExtensionDeprecated("请使用`mj_didConvertToObjectWithKeyValues:`替代");
  57. - (void)mj_keyValuesDidFinishConvertingToObject:(NSDictionary *)keyValues MJExtensionDeprecated("请使用`mj_didConvertToObjectWithKeyValues:`替代");
  58. - (void)mj_didConvertToObjectWithKeyValues:(NSDictionary *)keyValues;
  59. /**
  60. * 当模型转字典完毕时调用
  61. */
  62. - (void)mj_objectDidFinishConvertingToKeyValues MJExtensionDeprecated("请使用`mj_objectDidConvertToKeyValues:`替代");
  63. - (void)mj_objectDidConvertToKeyValues:(NSMutableDictionary *)keyValues;
  64. @end
  65. @interface NSObject (MJKeyValue) <MJKeyValue>
  66. #pragma mark - 类方法
  67. /**
  68. * 字典转模型过程中遇到的错误
  69. */
  70. + (NSError *)mj_error;
  71. /**
  72. * 模型转字典时,字典的key是否参考replacedKeyFromPropertyName等方法(父类设置了,子类也会继承下来)
  73. */
  74. + (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference;
  75. #pragma mark - 对象方法
  76. /**
  77. * 将字典的键值对转成模型属性
  78. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  79. */
  80. - (instancetype)mj_setKeyValues:(id)keyValues;
  81. /**
  82. * 将字典的键值对转成模型属性
  83. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  84. * @param context CoreData上下文
  85. */
  86. - (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context;
  87. /**
  88. * 将模型转成字典
  89. * @return 字典
  90. */
  91. - (NSMutableDictionary *)mj_keyValues;
  92. - (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys;
  93. - (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys;
  94. /**
  95. * 通过模型数组来创建一个字典数组
  96. * @param objectArray 模型数组
  97. * @return 字典数组
  98. */
  99. + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray;
  100. + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys;
  101. + (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys;
  102. #pragma mark - 字典转模型
  103. /**
  104. * 通过字典来创建一个模型
  105. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  106. * @return 新建的对象
  107. */
  108. + (instancetype)mj_objectWithKeyValues:(id)keyValues;
  109. /**
  110. * 通过字典来创建一个CoreData模型
  111. * @param keyValues 字典(可以是NSDictionary、NSData、NSString)
  112. * @param context CoreData上下文
  113. * @return 新建的对象
  114. */
  115. + (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context;
  116. /**
  117. * 通过plist来创建一个模型
  118. * @param filename 文件名(仅限于mainBundle中的文件)
  119. * @return 新建的对象
  120. */
  121. + (instancetype)mj_objectWithFilename:(NSString *)filename;
  122. /**
  123. * 通过plist来创建一个模型
  124. * @param file 文件全路径
  125. * @return 新建的对象
  126. */
  127. + (instancetype)mj_objectWithFile:(NSString *)file;
  128. #pragma mark - 字典数组转模型数组
  129. /**
  130. * 通过字典数组来创建一个模型数组
  131. * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString)
  132. * @return 模型数组
  133. */
  134. + (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray;
  135. /**
  136. * 通过字典数组来创建一个模型数组
  137. * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString)
  138. * @param context CoreData上下文
  139. * @return 模型数组
  140. */
  141. + (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context;
  142. /**
  143. * 通过plist来创建一个模型数组
  144. * @param filename 文件名(仅限于mainBundle中的文件)
  145. * @return 模型数组
  146. */
  147. + (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename;
  148. /**
  149. * 通过plist来创建一个模型数组
  150. * @param file 文件全路径
  151. * @return 模型数组
  152. */
  153. + (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file;
  154. #pragma mark - 转换为JSON
  155. /**
  156. * 转换为JSON Data
  157. */
  158. - (NSData *)mj_JSONData;
  159. /**
  160. * 转换为字典或者数组
  161. */
  162. - (id)mj_JSONObject;
  163. /**
  164. * 转换为JSON 字符串
  165. */
  166. - (NSString *)mj_JSONString;
  167. @end