json中null的處理

在服務器返回 json 數據的時候,時常會出現如下數據

"somevalue":null

這個時候,json 解析的時候,就會吧這個 null 解析成 NSNull 的對象,我們向這個 NSNull 對象發送消息的時候就會遇到 crash 的問題。

而且服務器返回數據中 null 值是不定的,我們也不太可能每個值都判斷一遍[somevalue isKindOfClass:[NSNull class]]

下面教大家兩種方法:

AFNetworking

如果你使用了 AFNetworking,只需要增加如下代碼

((AFJSONResponseSerializer *)manager.responseSerializer).removesKeysWithNullValues = YES;

經過如上設置,所有 NSNull 的值,都變成了 nil,接下來又可以愉快的玩耍了。

沒有 AFNetworking

沒有使用 AFN 也沒關係,我們需要的只是向 NSNull 發消息不崩潰,已經有人實現了這個功能了

NullSafe

你只需要引入這個庫,什麼都不需要做,當你再向 NSNull 對象發消息的時候,就不會 crash 了。

這裏還有一個極簡的封裝方法:

#import "NSNull+OVNatural.h"
@implementation NSNull (OVNatural)
- (void)forwardInvocation:(NSInvocation *)invocation
{
if ([self respondsToSelector:[invocation selector]]) {
[invocation invokeWithTarget:self];
}
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
NSMethodSignature *sig = [[NSNull class] instanceMethodSignatureForSelector:selector];
if(sig == nil) {
sig = [NSMethodSignature signatureWithObjCTypes:"@^v^c"];
}
return sig;
}
@end

關於[NSMethodSignature signatureWithObjCTypes:“@^vc”]的功能
可以參考以下兩篇文章

Objective-C Runtime Programming Guide
Type Encodings

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章