From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 12 Jul 2018 13:44:34 +0800
Subject: [PATCH] bug修复和功能优化

---
 screendisplay/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m |  709 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 709 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m b/screendisplay/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m
new file mode 100755
index 0000000..84fe982
--- /dev/null
+++ b/screendisplay/Pods/MJExtension/MJExtension/NSObject+MJKeyValue.m
@@ -0,0 +1,709 @@
+//
+//  NSObject+MJKeyValue.m
+//  MJExtension
+//
+//  Created by mj on 13-8-24.
+//  Copyright (c) 2013��� ���������. All rights reserved.
+//
+
+#import "NSObject+MJKeyValue.h"
+#import "NSObject+MJProperty.h"
+#import "NSString+MJExtension.h"
+#import "MJProperty.h"
+#import "MJPropertyType.h"
+#import "MJExtensionConst.h"
+#import "MJFoundation.h"
+#import "NSString+MJExtension.h"
+#import "NSObject+MJClass.h"
+
+@implementation NSObject (MJKeyValue)
+
+#pragma mark - ������
+static const char MJErrorKey = '\0';
++ (NSError *)mj_error
+{
+    return objc_getAssociatedObject(self, &MJErrorKey);
+}
+
++ (void)setMj_error:(NSError *)error
+{
+    objc_setAssociatedObject(self, &MJErrorKey, error, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+#pragma mark - ������ -> ������������������
+/** ������������������������������key������������replacedKeyFromPropertyName��������������������������������������������������������� */
+static const char MJReferenceReplacedKeyWhenCreatingKeyValuesKey = '\0';
+
++ (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference
+{
+    objc_setAssociatedObject(self, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey, @(reference), OBJC_ASSOCIATION_ASSIGN);
+}
+
++ (BOOL)mj_isReferenceReplacedKeyWhenCreatingKeyValues
+{
+    __block id value = objc_getAssociatedObject(self, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey);
+    if (!value) {
+        [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) {
+            value = objc_getAssociatedObject(c, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey);
+            
+            if (value) *stop = YES;
+        }];
+    }
+    return [value boolValue];
+}
+
+#pragma mark - --���������������--
+static NSNumberFormatter *numberFormatter_;
++ (void)load
+{
+    numberFormatter_ = [[NSNumberFormatter alloc] init];
+    
+    // ������������
+    [self mj_referenceReplacedKeyWhenCreatingKeyValues:YES];
+}
+
+#pragma mark - --������������--
+#pragma mark - ������ -> ������
+- (instancetype)mj_setKeyValues:(id)keyValues
+{
+    return [self mj_setKeyValues:keyValues context:nil];
+}
+
+/**
+ ���������������
+ */
+- (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context
+{
+    // ������JSON������
+    keyValues = [keyValues mj_JSONObject];
+    
+    MJExtensionAssertError([keyValues isKindOfClass:[NSDictionary class]], self, [self class], @"keyValues������������������������");
+    
+    Class clazz = [self class];
+    NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames];
+    NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames];
+    
+    //������������������������������������������������������������������������������������������������
+    [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) {
+        @try {
+            // 0.���������������������
+            if (allowedPropertyNames.count && ![allowedPropertyNames containsObject:property.name]) return;
+            if ([ignoredPropertyNames containsObject:property.name]) return;
+            
+            // 1.���������������
+            id value;
+            NSArray *propertyKeyses = [property propertyKeysForClass:clazz];
+            for (NSArray *propertyKeys in propertyKeyses) {
+                value = keyValues;
+                for (MJPropertyKey *propertyKey in propertyKeys) {
+                    value = [propertyKey valueInObject:value];
+                }
+                if (value) break;
+            }
+            
+            // ������������
+            id newValue = [clazz mj_getNewValueFromObject:self oldValue:value property:property];
+            if (newValue != value) { // ���������������������
+                [property setValue:newValue forObject:self];
+                return;
+            }
+            
+            // ���������������������������������
+            if (!value || value == [NSNull null]) return;
+            
+            // 2.������������
+            MJPropertyType *type = property.type;
+            Class propertyClass = type.typeClass;
+            Class objectClass = [property objectClassInArrayForClass:[self class]];
+            
+            // ��������� -> ������������
+            if (propertyClass == [NSMutableArray class] && [value isKindOfClass:[NSArray class]]) {
+                value = [NSMutableArray arrayWithArray:value];
+            } else if (propertyClass == [NSMutableDictionary class] && [value isKindOfClass:[NSDictionary class]]) {
+                value = [NSMutableDictionary dictionaryWithDictionary:value];
+            } else if (propertyClass == [NSMutableString class] && [value isKindOfClass:[NSString class]]) {
+                value = [NSMutableString stringWithString:value];
+            } else if (propertyClass == [NSMutableData class] && [value isKindOfClass:[NSData class]]) {
+                value = [NSMutableData dataWithData:value];
+            }
+            
+            if (!type.isFromFoundation && propertyClass) { // ������������
+                value = [propertyClass mj_objectWithKeyValues:value context:context];
+            } else if (objectClass) {
+                if (objectClass == [NSURL class] && [value isKindOfClass:[NSArray class]]) {
+                    // string array -> url array
+                    NSMutableArray *urlArray = [NSMutableArray array];
+                    for (NSString *string in value) {
+                        if (![string isKindOfClass:[NSString class]]) continue;
+                        [urlArray addObject:string.mj_url];
+                    }
+                    value = urlArray;
+                } else { // ������������-->������������
+                    value = [objectClass mj_objectArrayWithKeyValuesArray:value context:context];
+                }
+            } else {
+                if (propertyClass == [NSString class]) {
+                    if ([value isKindOfClass:[NSNumber class]]) {
+                        // NSNumber -> NSString
+                        value = [value description];
+                    } else if ([value isKindOfClass:[NSURL class]]) {
+                        // NSURL -> NSString
+                        value = [value absoluteString];
+                    }
+                } else if ([value isKindOfClass:[NSString class]]) {
+                    if (propertyClass == [NSURL class]) {
+                        // NSString -> NSURL
+                        // ���������������
+                        value = [value mj_url];
+                    } else if (type.isNumberType) {
+                        NSString *oldValue = value;
+                        
+                        // NSString -> NSNumber
+                        if (type.typeClass == [NSDecimalNumber class]) {
+                            value = [NSDecimalNumber decimalNumberWithString:oldValue];
+                        } else {
+                            value = [numberFormatter_ numberFromString:oldValue];
+                        }
+                        
+                        // ���������BOOL
+                        if (type.isBoolType) {
+                            // ������������BOOL������������������charValue���������
+                            // ���������������������������charValue������BOOL������
+                            NSString *lower = [oldValue lowercaseString];
+                            if ([lower isEqualToString:@"yes"] || [lower isEqualToString:@"true"]) {
+                                value = @YES;
+                            } else if ([lower isEqualToString:@"no"] || [lower isEqualToString:@"false"]) {
+                                value = @NO;
+                            }
+                        }
+                    }
+                }
+                
+                // value���property���������������
+                if (propertyClass && ![value isKindOfClass:propertyClass]) {
+                    value = nil;
+                }
+            }
+            
+            // 3.������
+            [property setValue:value forObject:self];
+        } @catch (NSException *exception) {
+            MJExtensionBuildError([self class], exception.reason);
+            MJExtensionLog(@"%@", exception);
+        }
+    }];
+    
+    // ������������
+    if ([self respondsToSelector:@selector(mj_keyValuesDidFinishConvertingToObject)]) {
+        [self mj_keyValuesDidFinishConvertingToObject];
+    }
+    return self;
+}
+
++ (instancetype)mj_objectWithKeyValues:(id)keyValues
+{
+    return [self mj_objectWithKeyValues:keyValues context:nil];
+}
+
++ (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context
+{
+    // ������JSON������
+    keyValues = [keyValues mj_JSONObject];
+    MJExtensionAssertError([keyValues isKindOfClass:[NSDictionary class]], nil, [self class], @"keyValues������������������������");
+    
+    if ([self isSubclassOfClass:[NSManagedObject class]] && context) {
+        NSString *entityName = [NSStringFromClass(self) componentsSeparatedByString:@"."].lastObject;
+        return [[NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:context] mj_setKeyValues:keyValues context:context];
+    }
+    return [[[self alloc] init] mj_setKeyValues:keyValues];
+}
+
++ (instancetype)mj_objectWithFilename:(NSString *)filename
+{
+    MJExtensionAssertError(filename != nil, nil, [self class], @"filename���������nil");
+    
+    return [self mj_objectWithFile:[[NSBundle mainBundle] pathForResource:filename ofType:nil]];
+}
+
++ (instancetype)mj_objectWithFile:(NSString *)file
+{
+    MJExtensionAssertError(file != nil, nil, [self class], @"file���������nil");
+    
+    return [self mj_objectWithKeyValues:[NSDictionary dictionaryWithContentsOfFile:file]];
+}
+
+#pragma mark - ������������ -> ������������
++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
+{
+    return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:nil];
+}
+
++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context
+{
+    // ���������JSON���������
+    keyValuesArray = [keyValuesArray mj_JSONObject];
+    
+    // 1.���������������
+    MJExtensionAssertError([keyValuesArray isKindOfClass:[NSArray class]], nil, [self class], @"keyValuesArray������������������������");
+    
+    // ���������������������������NSString���NSNumber���������
+    if ([MJFoundation isClassFromFoundation:self]) return [NSMutableArray arrayWithArray:keyValuesArray];
+    
+
+    // 2.������������
+    NSMutableArray *modelArray = [NSMutableArray array];
+    
+    // 3.������
+    for (NSDictionary *keyValues in keyValuesArray) {
+        if ([keyValues isKindOfClass:[NSArray class]]){
+            [modelArray addObject:[self mj_objectArrayWithKeyValuesArray:keyValues context:context]];
+        } else {
+            id model = [self mj_objectWithKeyValues:keyValues context:context];
+            if (model) [modelArray addObject:model];
+        }
+    }
+    
+    return modelArray;
+}
+
++ (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename
+{
+    MJExtensionAssertError(filename != nil, nil, [self class], @"filename���������nil");
+    
+    return [self mj_objectArrayWithFile:[[NSBundle mainBundle] pathForResource:filename ofType:nil]];
+}
+
++ (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file
+{
+    MJExtensionAssertError(file != nil, nil, [self class], @"file���������nil");
+    
+    return [self mj_objectArrayWithKeyValuesArray:[NSArray arrayWithContentsOfFile:file]];
+}
+
+#pragma mark - ������ -> ������
+- (NSMutableDictionary *)mj_keyValues
+{
+    return [self mj_keyValuesWithKeys:nil ignoredKeys:nil];
+}
+
+- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys
+{
+    return [self mj_keyValuesWithKeys:keys ignoredKeys:nil];
+}
+
+- (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys
+{
+    return [self mj_keyValuesWithKeys:nil ignoredKeys:ignoredKeys];
+}
+
+- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys
+{
+    // ���������������������������, ������������������
+    MJExtensionAssertError(![MJFoundation isClassFromFoundation:[self class]], (NSMutableDictionary *)self, [self class], @"���������������������������")
+    
+    id keyValues = [NSMutableDictionary dictionary];
+    
+    Class clazz = [self class];
+    NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames];
+    NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames];
+    
+    [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) {
+        @try {
+            // 0.���������������������
+            if (allowedPropertyNames.count && ![allowedPropertyNames containsObject:property.name]) return;
+            if ([ignoredPropertyNames containsObject:property.name]) return;
+            if (keys.count && ![keys containsObject:property.name]) return;
+            if ([ignoredKeys containsObject:property.name]) return;
+            
+            // 1.���������������
+            id value = [property valueForObject:self];
+            if (!value) return;
+            
+            // 2.���������������������
+            MJPropertyType *type = property.type;
+            Class propertyClass = type.typeClass;
+            if (!type.isFromFoundation && propertyClass) {
+                value = [value mj_keyValues];
+            } else if ([value isKindOfClass:[NSArray class]]) {
+                // 3.������������������������������������
+                value = [NSObject mj_keyValuesArrayWithObjectArray:value];
+            } else if (propertyClass == [NSURL class]) {
+                value = [value absoluteString];
+            }
+            
+            // 4.������
+            if ([clazz mj_isReferenceReplacedKeyWhenCreatingKeyValues]) {
+                NSArray *propertyKeys = [[property propertyKeysForClass:clazz] firstObject];
+                NSUInteger keyCount = propertyKeys.count;
+                // ������������
+                __block id innerContainer = keyValues;
+                [propertyKeys enumerateObjectsUsingBlock:^(MJPropertyKey *propertyKey, NSUInteger idx, BOOL *stop) {
+                    // ���������������
+                    MJPropertyKey *nextPropertyKey = nil;
+                    if (idx != keyCount - 1) {
+                        nextPropertyKey = propertyKeys[idx + 1];
+                    }
+                    
+                    if (nextPropertyKey) { // ������������������key
+                        // ������propertyKey���������������������������
+                        id tempInnerContainer = [propertyKey valueInObject:innerContainer];
+                        if (tempInnerContainer == nil || [tempInnerContainer isKindOfClass:[NSNull class]]) {
+                            if (nextPropertyKey.type == MJPropertyKeyTypeDictionary) {
+                                tempInnerContainer = [NSMutableDictionary dictionary];
+                            } else {
+                                tempInnerContainer = [NSMutableArray array];
+                            }
+                            if (propertyKey.type == MJPropertyKeyTypeDictionary) {
+                                innerContainer[propertyKey.name] = tempInnerContainer;
+                            } else {
+                                innerContainer[propertyKey.name.intValue] = tempInnerContainer;
+                            }
+                        }
+                        
+                        if ([tempInnerContainer isKindOfClass:[NSMutableArray class]]) {
+                            NSMutableArray *tempInnerContainerArray = tempInnerContainer;
+                            int index = nextPropertyKey.name.intValue;
+                            while (tempInnerContainerArray.count < index + 1) {
+                                [tempInnerContainerArray addObject:[NSNull null]];
+                            }
+                        }
+                        
+                        innerContainer = tempInnerContainer;
+                    } else { // ������������key
+                        if (propertyKey.type == MJPropertyKeyTypeDictionary) {
+                            innerContainer[propertyKey.name] = value;
+                        } else {
+                            innerContainer[propertyKey.name.intValue] = value;
+                        }
+                    }
+                }];
+            } else {
+                keyValues[property.name] = value;
+            }
+        } @catch (NSException *exception) {
+            MJExtensionBuildError([self class], exception.reason);
+            MJExtensionLog(@"%@", exception);
+        }
+    }];
+    
+    // ������������
+    if ([self respondsToSelector:@selector(mj_objectDidFinishConvertingToKeyValues)]) {
+        [self mj_objectDidFinishConvertingToKeyValues];
+    }
+    
+    return keyValues;
+}
+#pragma mark - ������������ -> ������������
++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray
+{
+    return [self mj_keyValuesArrayWithObjectArray:objectArray keys:nil ignoredKeys:nil];
+}
+
++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys
+{
+    return [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys ignoredKeys:nil];
+}
+
++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys
+{
+    return [self mj_keyValuesArrayWithObjectArray:objectArray keys:nil ignoredKeys:ignoredKeys];
+}
+
++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys
+{
+    // 0.���������������
+    MJExtensionAssertError([objectArray isKindOfClass:[NSArray class]], nil, [self class], @"objectArray������������������������");
+    
+    // 1.������������
+    NSMutableArray *keyValuesArray = [NSMutableArray array];
+    for (id object in objectArray) {
+        if (keys) {
+            [keyValuesArray addObject:[object mj_keyValuesWithKeys:keys]];
+        } else {
+            [keyValuesArray addObject:[object mj_keyValuesWithIgnoredKeys:ignoredKeys]];
+        }
+    }
+    return keyValuesArray;
+}
+
+#pragma mark - ���������JSON
+- (NSData *)mj_JSONData
+{
+    if ([self isKindOfClass:[NSString class]]) {
+        return [((NSString *)self) dataUsingEncoding:NSUTF8StringEncoding];
+    } else if ([self isKindOfClass:[NSData class]]) {
+        return (NSData *)self;
+    }
+    
+    return [NSJSONSerialization dataWithJSONObject:[self mj_JSONObject] options:kNilOptions error:nil];
+}
+
+- (id)mj_JSONObject
+{
+    if ([self isKindOfClass:[NSString class]]) {
+        return [NSJSONSerialization JSONObjectWithData:[((NSString *)self) dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil];
+    } else if ([self isKindOfClass:[NSData class]]) {
+        return [NSJSONSerialization JSONObjectWithData:(NSData *)self options:kNilOptions error:nil];
+    }
+    
+    return self.mj_keyValues;
+}
+
+- (NSString *)mj_JSONString
+{
+    if ([self isKindOfClass:[NSString class]]) {
+        return (NSString *)self;
+    } else if ([self isKindOfClass:[NSData class]]) {
+        return [[NSString alloc] initWithData:(NSData *)self encoding:NSUTF8StringEncoding];
+    }
+    
+    return [[NSString alloc] initWithData:[self mj_JSONData] encoding:NSUTF8StringEncoding];
+}
+@end
+
+@implementation NSObject (MJKeyValueDeprecated_v_2_5_16)
+- (instancetype)setKeyValues:(id)keyValues
+{
+    return [self mj_setKeyValues:keyValues];
+}
+
+- (instancetype)setKeyValues:(id)keyValues error:(NSError **)error
+{
+    id value = [self mj_setKeyValues:keyValues];
+    if (error != NULL) {
+    *error = [self.class mj_error];
+    }
+    return value;
+    
+}
+
+- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context
+{
+    return [self mj_setKeyValues:keyValues context:context];
+}
+
+- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error
+{
+    id value = [self mj_setKeyValues:keyValues context:context];
+    if (error != NULL) {
+    *error = [self.class mj_error];
+    }
+    return value;
+}
+
++ (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference
+{
+    [self mj_referenceReplacedKeyWhenCreatingKeyValues:reference];
+}
+
+- (NSMutableDictionary *)keyValues
+{
+    return [self mj_keyValues];
+}
+
+- (NSMutableDictionary *)keyValuesWithError:(NSError **)error
+{
+    id value = [self mj_keyValues];
+    if (error != NULL) {
+    *error = [self.class mj_error];
+    }
+    return value;
+}
+
+- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys
+{
+    return [self mj_keyValuesWithKeys:keys];
+}
+
+- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error
+{
+    id value = [self mj_keyValuesWithKeys:keys];
+    if (error != NULL) {
+    *error = [self.class mj_error];
+    }
+    return value;
+}
+
+- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys
+{
+    return [self mj_keyValuesWithIgnoredKeys:ignoredKeys];
+}
+
+- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error
+{
+    id value = [self mj_keyValuesWithIgnoredKeys:ignoredKeys];
+    if (error != NULL) {
+    *error = [self.class mj_error];
+    }
+    return value;
+}
+
++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray
+{
+    return [self mj_keyValuesArrayWithObjectArray:objectArray];
+}
+
++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error
+{
+    id value = [self mj_keyValuesArrayWithObjectArray:objectArray];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys
+{
+    return [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys];
+}
+
++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error
+{
+    id value = [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys
+{
+    return [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys];
+}
+
++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error
+{
+    id value = [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (instancetype)objectWithKeyValues:(id)keyValues
+{
+    return [self mj_objectWithKeyValues:keyValues];
+}
+
++ (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error
+{
+    id value = [self mj_objectWithKeyValues:keyValues];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context
+{
+    return [self mj_objectWithKeyValues:keyValues context:context];
+}
+
++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error
+{
+    id value = [self mj_objectWithKeyValues:keyValues context:context];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (instancetype)objectWithFilename:(NSString *)filename
+{
+    return [self mj_objectWithFilename:filename];
+}
+
++ (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error
+{
+    id value = [self mj_objectWithFilename:filename];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (instancetype)objectWithFile:(NSString *)file
+{
+    return [self mj_objectWithFile:file];
+}
+
++ (instancetype)objectWithFile:(NSString *)file error:(NSError **)error
+{
+    id value = [self mj_objectWithFile:file];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray
+{
+    return [self mj_objectArrayWithKeyValuesArray:keyValuesArray];
+}
+
++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error
+{
+    id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context
+{
+    return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context];
+}
+
++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error
+{
+    id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename
+{
+    return [self mj_objectArrayWithFilename:filename];
+}
+
++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error
+{
+    id value = [self mj_objectArrayWithFilename:filename];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
++ (NSMutableArray *)objectArrayWithFile:(NSString *)file
+{
+    return [self mj_objectArrayWithFile:file];
+}
+
++ (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error
+{
+    id value = [self mj_objectArrayWithFile:file];
+    if (error != NULL) {
+    *error = [self mj_error];
+    }
+    return value;
+}
+
+- (NSData *)JSONData
+{
+    return [self mj_JSONData];
+}
+
+- (id)JSONObject
+{
+    return [self mj_JSONObject];
+}
+
+- (NSString *)JSONString
+{
+    return [self mj_JSONString];
+}
+@end
\ No newline at end of file

--
Gitblit v1.8.0