近期遇到一個問題:
由於後臺人員對於接口數據沒有做空值處理,導致客戶端接收到的有些數據爲空(NSNull),而針對此類數據恰好客戶端的存儲結構爲int和float類型,類型轉換時報出了[NSNull intValue]或者[NSNull floatValue] unrecognized selector sent to instance 的錯誤。
解決此問題嘗試了以下思路:
1 添加returnObject == [NSNull null] 判斷,NSNull的元素配置一個目標類型的初始值。
問題解決了,但這樣做的話對於應用需要修改的地方較多,想想比較煩。2 想到此問題的引起原因是NSNull缺失這兩種方法,也就是說只要爲NSNull擴展補充缺失的方法就不會有問題了。
擴展NSNull代碼如下:
#import "NSNull+NullCast.h"
- (float)floatValue {
return 0.0;
}
- (int)intValue {
return 0;
}
在可能出現類似問題的類中引入NSNull+NullCast這個類問題就解決了,無需修改邏輯代碼。