問題分析:
使用NSJSONSerialization或者AFN框架的AFHTTPSessionManager(底層也是NSJSONSerialization)將NSData數(shù)據(jù)轉(zhuǎn)化成OC對象彼念,有時(shí)會(huì)出現(xiàn)URL正確勉躺,加載數(shù)據(jù)任然會(huì)報(bào)錯(cuò):
reason: '-[NSNull length]: unrecognized selector sent to instance
分析原因發(fā)現(xiàn),轉(zhuǎn)化出來的OC對象中含有null.所以糊昙,NSNull沒有l(wèi)ength方法,所以會(huì)報(bào)找不到方法錯(cuò)誤逛拱。
解決辦法:將"null"替換成“ ”邻遏。
- 1.先將NSData數(shù)據(jù)轉(zhuǎn)化成NSString;
- 2.再對轉(zhuǎn)化好的NSString進(jìn)行替換;
- 3.替換好的NSSting再轉(zhuǎn)化成NSData;
- 4.NSData轉(zhuǎn)化成OC對象
下面提供一個(gè)封裝好的方法汹桦,以后直接使用就好了
//替換數(shù)據(jù)中的空字符串
+ (NSArray*)arrayWithNoNullArray:(NSArray*)originalArray {
//array -> string
NSData *data = [NSJSONSerialization dataWithJSONObject:originalArray options:0 error:nil];
NSString *str =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//替換
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"null" withString:@"\"\""];
//string -> array
NSData *nData =[nStr dataUsingEncoding:NSUTF8StringEncoding];
return [NSJSONSerialization JSONObjectWithData:nData options:0 error:nil];
}
傳入一個(gè)含有null的OC數(shù)組鲁驶,直接返回替換過的新數(shù)組。用不含null的數(shù)組再去加載數(shù)據(jù)舞骆,就不會(huì)有問題了钥弯。
Snip20160726_7.png