1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- //
- // NSDictionary+AvoidCrash.m
- // https://github.com/chenfanfang/AvoidCrash
- //
- // Created by mac on 16/9/21.
- // Copyright © 2016年 chenfanfang. All rights reserved.
- //
- #import "NSDictionary+AvoidCrash.h"
- #import "AvoidCrash.h"
- @implementation NSDictionary (AvoidCrash)
- + (void)avoidCrashExchangeMethod {
-
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
-
- [AvoidCrash exchangeClassMethod:self method1Sel:@selector(dictionaryWithObjects:forKeys:count:) method2Sel:@selector(avoidCrashDictionaryWithObjects:forKeys:count:)];
- });
- }
- + (instancetype)avoidCrashDictionaryWithObjects:(const id _Nonnull __unsafe_unretained *)objects forKeys:(const id<NSCopying> _Nonnull __unsafe_unretained *)keys count:(NSUInteger)cnt {
-
- id instance = nil;
-
- @try {
- instance = [self avoidCrashDictionaryWithObjects:objects forKeys:keys count:cnt];
- }
- @catch (NSException *exception) {
-
- NSString *defaultToDo = @"AvoidCrash default is to remove nil key-values and instance a dictionary.";
- [AvoidCrash noteErrorWithException:exception defaultToDo:defaultToDo];
-
- //处理错误的数据,然后重新初始化一个字典
- NSUInteger index = 0;
- id _Nonnull __unsafe_unretained newObjects[cnt];
- id _Nonnull __unsafe_unretained newkeys[cnt];
-
- for (int i = 0; i < cnt; i++) {
- if (objects[i] && keys[i]) {
- newObjects[index] = objects[i];
- newkeys[index] = keys[i];
- index++;
- }
- }
- instance = [self avoidCrashDictionaryWithObjects:newObjects forKeys:newkeys count:index];
- }
- @finally {
- return instance;
- }
- }
- @end
|