網絡數據強制數據轉化

server給的數據多種多樣導致客戶端崩潰

因爲server端給回的數據類型多種多樣,可能本來是字符串,然後給到我們是NSNumber類型,這樣我們如果沒有進行強制的轉換,調用到NSString的方法可能引起程序奔潰,所以我給NSDictionary寫了類別,處理簡單的常用的數據類型,具體代碼如下:


NSDictionary建立類別,Format

1:在NSDictionary+Format.h中加入下列代碼:

/**

 *  獲取string 如果爲null或者不存在則返回空字符串

 *

 *  @param key

 */

- (NSString*)stringWithKey:(NSString*)key;


/**

 *  獲取array 如果爲null或者不存在則返回空數組

 *

 *  @param key

 */

- (NSArray*)arrayWithKey:(NSString*)key;


/**

 *  獲取dic 如果爲null或者不存在則返回空dic

 *

 *  @param key

 */

- (NSDictionary*)dicWithKey:(NSString*)key;



2:在NSDictionary+Format.m中加入下列代碼:


- (NSString*)stringWithKey:(NSString*)key {

    id object = [self objectForKey:key];

    if (object && ([object isKindOfClass:[NSString class]] || [object isKindOfClass:[NSNumber class]])) {

        return [NSString stringWithFormat:@"%@", object];

    } else {

        return @"";

    }

}


- (NSArray*)arrayWithKey:(NSString*)key {

    id object = [self objectForKey:key];

    if (object && [object isKindOfClass:[NSArray class]]) {

        return object;

    } else {

        return [NSArray array];

    }

}


- (NSDictionary*)dicWithKey:(NSString*)key {

    id object = [self objectForKey:key];

    if (object && [object isKindOfClass:[NSDictionary class]]) {

        return object;

    } else {

        return [NSDictionary dictionary];

    }

}


3:在網絡請求回來的數據,全部用

 [dic stringWithKey:@"xx"]

 [dic arrayWithKey:@"xx"]

 [dic dicWithKey:@"xx"]

來代替[dic objectForKey:@"xx"


這樣無論server返回什麼數據,我們都不需要每一個都做格式化,也不會崩潰,我們只需要判斷字符串是不是空,數據是不是空,是不是很簡單呢?




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