坑1:给你看似"正确的值",但类型错误,需要仔细观察,后根据类型操作
给你看似"正确的值",但类型错误,如图:
如图,当你没注意到类型已经变化的时候,如果这是你还采用for语句去获取你认为还是数组的client_menu的时候,就基本上会出现崩溃了。所以,如果遇到崩溃的时候,还需需要仔细检查返回的类型是否有问题(自己之前就遇到过测试环境和正式环境返回的类型不一样的问题,而导致崩溃)。
NSMutableArray
与NSMutableDictionary
一个是可变数组,一个是可变词典,两者都可以通过for语句来取值。
for (<#type *object#> in <#collection#>) {
<#statements#>
}
不同的是,
①可变数组NSMutableArray
通过for (<#type *object#> in <#collection#>)
时,取到的object就是数组里的元素;
②而可变词典NSMutableDictionary
通过for (<#type *object#> in <#collection#>)
时,取到的object就是词典里的key;
附:NSMutableDictionary的枚举方法
//一般枚举方法
NSArray *keys = [dic allKeys];
NSInteger length = [keys count];
for (NSInteger i = 0; i < length;i++) {
id key = [keys objectAtIndex:i];
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
}
//快速枚举方法
for (id key in dic) { //注意这里取到的object就已经是key了
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
}
//通过枚举类型枚举
NSEnumerator *enumerator = [dic keyEnumerator];
id key = [enumerator nextObject];
while (key) {
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
key = [enumerator nextObject];
}
坑2:服务器返回数据看起来一样,实际多了写没用的特殊字符,需要去掉
如果我们的后台接口返回的数据有加密,那我们自然要对加密的数据进行解密,但解密之前,我们必须先确保服务器返回的数据没有多余的特殊字符,否则会解密失败。
下面这个例子,是测试环境的时候我们去掉了多余的\n,但是正是环境的时候却发现还有\r要去掉。之前就是没发现服务器返回的数据不一样(虽然可能看起来一样,但是多了特殊字符),而导致的错误。所以这里我们把所有的特殊字符\r
、\n
都去掉即可。
坑3:待补充
容错处理
其他容错处理运用runtime黑魔法,异常处理等就可以处理了,老生常谈,就不详细介绍了。
以下是一个参考例子: ios 容错处理JKDataHelper和AvoidCrash
完!