修复了部分UI,阿里推送token,wifi重名的问题

This commit is contained in:
wbzhan
2019-10-12 17:56:50 +08:00
parent 874c743f2b
commit d72f71f4df
32 changed files with 504 additions and 736 deletions
@@ -16,6 +16,26 @@
#import "NSString+MJExtension.h"
#import "NSObject+MJClass.h"
@implementation NSDecimalNumber(MJKeyValue)
- (id)standardValueWithTypeCode:(NSString *)typeCode {
// 由于这里涉及到编译器问题, 暂时保留 Long, 实际上在 64 位系统上, 这 2 个精度范围相同,
// 32 位略有不同, 其余都可使用 Double 进行强转不丢失精度
if ([typeCode isEqualToString:MJPropertyTypeLongLong]) {
return @(self.longLongValue);
} else if ([typeCode isEqualToString:MJPropertyTypeLongLong.uppercaseString]) {
return @(self.unsignedLongLongValue);
} else if ([typeCode isEqualToString:MJPropertyTypeLong]) {
return @(self.longValue);
} else if ([typeCode isEqualToString:MJPropertyTypeLong.uppercaseString]) {
return @(self.unsignedLongValue);
} else {
return @(self.doubleValue);
}
}
@end
@implementation NSObject (MJKeyValue)
#pragma mark - 错误
@@ -53,11 +73,8 @@ static const char MJReferenceReplacedKeyWhenCreatingKeyValuesKey = '\0';
}
#pragma mark - --常用的对象--
static NSNumberFormatter *numberFormatter_;
+ (void)load
{
numberFormatter_ = [[NSNumberFormatter alloc] init];
// 默认设置
[self mj_referenceReplacedKeyWhenCreatingKeyValues:YES];
}
@@ -83,6 +100,11 @@ static NSNumberFormatter *numberFormatter_;
NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames];
NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames];
NSLocale *numberLocale = nil;
if ([self.class respondsToSelector:@selector(mj_numberLocale)]) {
numberLocale = self.class.mj_numberLocale;
}
//通过封装的方法回调一个通过运行时编写的,用于返回属性列表的方法。
[clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) {
@try {
@@ -141,50 +163,59 @@ static NSNumberFormatter *numberFormatter_;
} 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 (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 -> NSDecimalNumber, 使用 DecimalNumber 来转换数字, 避免丢失精度以及溢出
NSDecimalNumber *decimalValue = [NSDecimalNumber decimalNumberWithString:oldValue
locale:numberLocale];
// 检查特殊情况
if (decimalValue == NSDecimalNumber.notANumber) {
value = @(0);
}else if (propertyClass != [NSDecimalNumber class]) {
value = [decimalValue standardValueWithTypeCode:type.code];
} else {
value = decimalValue;
}
} 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;
}
// 如果是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;
} else if ([value isKindOfClass:[NSNumber class]] && propertyClass == [NSDecimalNumber class]){
// 过滤 NSDecimalNumber类型
if (![value isKindOfClass:[NSDecimalNumber class]]) {
value = [NSDecimalNumber decimalNumberWithDecimal:[((NSNumber *)value) decimalValue]];
}
}
// 经过转换后, 最终检查 value 与 property 是否匹配
if (propertyClass && ![value isKindOfClass:propertyClass]) {
value = nil;
}
// 3.赋值
[property setValue:value forObject:self];
} @catch (NSException *exception) {
@@ -194,9 +225,18 @@ static NSNumberFormatter *numberFormatter_;
}];
// 转换完毕
if ([self respondsToSelector:@selector(mj_didConvertToObjectWithKeyValues:)]) {
[self mj_didConvertToObjectWithKeyValues:keyValues];
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
if ([self respondsToSelector:@selector(mj_keyValuesDidFinishConvertingToObject)]) {
[self mj_keyValuesDidFinishConvertingToObject];
}
if ([self respondsToSelector:@selector(mj_keyValuesDidFinishConvertingToObject:)]) {
[self mj_keyValuesDidFinishConvertingToObject:keyValues];
}
#pragma clang diagnostic pop
return self;
}
@@ -299,6 +339,11 @@ static NSNumberFormatter *numberFormatter_;
- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys
{
// 如果自己不是模型类, 那就返回自己
// 模型类过滤掉 NSNull
// 唯一一个不返回自己的
if ([self isMemberOfClass:NSNull.class]) { return nil; }
// 这里虽然返回了自己, 但是其实是有报错信息的.
// TODO: 报错机制不好, 需要重做
MJExtensionAssertError(![MJFoundation isClassFromFoundation:[self class]], (NSMutableDictionary *)self, [self class], @"不是自定义的模型类")
id keyValues = [NSMutableDictionary dictionary];
@@ -387,9 +432,15 @@ static NSNumberFormatter *numberFormatter_;
}];
// 转换完毕
if ([self respondsToSelector:@selector(mj_objectDidConvertToKeyValues:)]) {
[self mj_objectDidConvertToKeyValues:keyValues];
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
if ([self respondsToSelector:@selector(mj_objectDidFinishConvertingToKeyValues)]) {
[self mj_objectDidFinishConvertingToKeyValues];
}
#pragma clang diagnostic pop
return keyValues;
}
@@ -418,9 +469,13 @@ static NSNumberFormatter *numberFormatter_;
NSMutableArray *keyValuesArray = [NSMutableArray array];
for (id object in objectArray) {
if (keys) {
[keyValuesArray addObject:[object mj_keyValuesWithKeys:keys]];
id convertedObj = [object mj_keyValuesWithKeys:keys];
if (!convertedObj) { continue; }
[keyValuesArray addObject:convertedObj];
} else {
[keyValuesArray addObject:[object mj_keyValuesWithIgnoredKeys:ignoredKeys]];
id convertedObj = [object mj_keyValuesWithIgnoredKeys:ignoredKeys];
if (!convertedObj) { continue; }
[keyValuesArray addObject:convertedObj];
}
}
return keyValuesArray;
@@ -459,251 +514,5 @@ static NSNumberFormatter *numberFormatter_;
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