iOS - 数组,字典打印以及防止数组取值越界字典插入nil
2017-05-19 10:37
1311 查看
数组打印类
创建数组分类NSArray+Log.h
.m文件重写方法
descriptionWithLocale:
- (NSString *)descriptionWithLocale:(id)locale { NSMutableString *string = [NSMutableString string]; // 开头有个[ [string appendString:@"[\n"]; // 遍历所有的元素 [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [string appendFormat:@"\t%@,\n", obj]; }]; // 结尾有个] [string appendString:@"]"]; // 查找最后一个逗号 NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch]; if (range.location != NSNotFound) [string deleteCharactersInRange:range]; return string; }
字典打印类
创建字典分类NSDictionary+Log.h
.m文件重写方法
descriptionWithLocale
-(NSString *)descriptionWithLocale:(id)locale{ NSMutableString *string = [NSMutableString string]; // 开头有个{ [string appendString:@"{\n"]; // 遍历所有的键值对 [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [string appendFormat:@"\t%@", key]; [string appendString:@" : "]; [string appendFormat:@"%@,\n", obj]; }]; // 结尾有个} [string appendString:@"}"]; // 查找最后一个逗号 NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch]; if (range.location != NSNotFound) [string deleteCharactersInRange:range]; return string; }
防止数组取值越界
创建数组分类NSArray+EM
.m文件通过
runtime交换方法为自己写的
em_objectAtIndex取值方法,从中判断越界情况
#import "NSArray+EM.h" #import <objc/runtime.h> @implementation NSArray (EM) +(void)load { Method fromMethod = class_getInstanceMethod(objc_getClass("__NSArrayI"), @selector(objectAtIndex:)); Method toMethod = class_getInstanceMethod(objc_getClass("__NSArrayI"), @selector(em_objectAtIndex:)); method_exchangeImplementations(fromMethod, toMethod); } - (id)em_objectAtIndex:(NSUInteger)index { if (self.count - 1 < index) { return @"越界"; }else { return [self em_objectAtIndex:index]; } } @end
可变数组分类
NSMutableArray+EM类似
#import "NSMutableArray+EM.h" #import <objc/runtime.h> @implementation NSMutableArray (EM) +(void)load { Method fromMethod = class_getInstanceMethod(objc_getClass("__NSArrayM"), @selector(objectAtIndex:)); Method toMethod = class_getInstanceMethod(objc_getClass("__NSArrayM"), @selector(em_objectAtIndex:)); method_exchangeImplementations(fromMethod, toMethod); } - (id)em_objectAtIndex:(NSUInteger)index { if (self.count - 1 < index) { return @"越界"; }else { return [self em_objectAtIndex:index]; } } @end
可变字典防止插入空nil
创建分类NSMutableDictionary+EM
.m文件
#import "NSMutableDictionary+EM.h" #import <objc/runtime.h> @implementation NSMutableDictionary (EM) + (void)load { Method fromMethod = class_getInstanceMethod(objc_getClass("__NSDictionaryM"), @selector(setObject:forKey:)); Method toMethod = class_getInstanceMethod(objc_getClass("__NSDictionaryM"), @selector(em_setObject:forKey:)); method_exchangeImplementations(fromMethod, toMethod); } - (void)em_setObject:(id)emObject forKey:(NSString *)key { if (emObject == nil) { [self em_setObject:@"字典插入了nil" forKey:key]; }else { [self em_setObject:emObject forKey:key]; } } @end
测试打印
字典中
hello对应的object插入了nil,则
hello对应的value被我们替换成了
NSMutableDictionary+EM.m文件中的自定义的语句
数组取值越界同样返回了被我们定义的内容
越界
项目中经常遇到的就是
tableView给cell赋值数组取值越界,以及发送网络请求字典中插入了空值,在返回的数据中用YYModel解决返回nil.
相关文章推荐
- IOS 字典数组简写,以及字典中没有此key的取值
- iOS之利用runtime,避免可变数组和可变字典为nil或者数组越界导致的崩溃
- 解决iOS打印数组和字典中文显示异常问题
- [iOS]防止数组越界及添加空值的crash的扩展
- iOS 第七期考核题(字符串以及字典的使用 数组内容转换成字符串)
- iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据
- 用Method Swizzling来避免数组越界与可变字典value值为nil造成的程序崩溃
- iOS 防止数组越界 对象类型不一致的安全处理 使用category对nsmutablearray处理
- IOS中 打印字典、数组时 直接显示中文(而不是显示Unicode字符)
- iOS开发通过案例谈iOS代码重构:合并、格式化输出、宏变量、利用数组字典存储数据,以及利用plist的终极知识
- IOS 将打印字典和数组的内容由字符编码变为中文
- iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据
- iOS中防止数组越界之后发生崩溃
- iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据
- 利用runtime,避免UIButton 重复点击, 可变数组和可变字典为nil,或者数组越界导致的崩溃
- 数组不能有nil的对象,字典不能插入nil的值
- iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据
- 【iOS开发-44】通过案例谈iOS代码重构:合并、格式化输出、宏变量、利用数组字典存储数据,以及利用plist的终极知识
- iOS之字符串、数组、字典的简单处理
- C++实现数组的排序/插入重新排序/以及逆置操作