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