您的位置:首页 > 移动开发 > IOS开发

iOS项目开发中,对后台返回数据为<null>时候的处理,避免取值产生程序崩溃问题

2016-08-26 11:20 621 查看
这里呢是整理的一位老鸟的东西,好东西得分享




大致实现思路就是循环便利做比较,如果发现是NSNull类型的就把值改为空字符串;这样的好处就是当数据请求回来,删除一下数据里面为<null>类型的东西,避免在直接取的时候产生程序崩溃问题;

两个方法,一个返回NSArray,一个是NSDictionary,根据需求选择

.h 文件

/**

 *  服务器返回的数据为<null>时的处理

 *

 *  @param dic 经处理过后的数据,数据类型为字典,避免直接取数据时出现程序崩溃现象。

 */

- (NSDictionary *)deleteEmpty:(NSDictionary *)dic;

/**

 *  服务器返回的数据为<null>时的处理

 *

 *  @param dic 经处理过后的数据,数据类型为数组,避免直接取数据时出现程序崩溃现象。

 */

- (NSArray *)deleteEmptyArr:(NSArray *)arr;

.m 文件

@implementation NSObject (DeleteArrOrDeleteDicBothNull)

- (NSDictionary *)deleteEmpty:(NSDictionary *)dic

{

    NSMutableDictionary *mdic = [[NSMutableDictionary alloc] initWithDictionary:dic];

    NSMutableArray *set = [[NSMutableArray alloc] init];

    NSMutableDictionary *dicSet = [[NSMutableDictionary alloc] init];

    NSMutableDictionary *arrSet = [[NSMutableDictionary alloc] init];

    for (id obj in mdic.allKeys)

    {

        id value = mdic[obj];

        if ([value isKindOfClass:[NSDictionary class]])

        {

            NSDictionary *changeDic = [self deleteEmpty:value];

            [dicSet setObject:changeDic forKey:obj];

        }

        else if ([value isKindOfClass:[NSArray class]])

        {

            NSArray *changeArr = [self deleteEmptyArr:value];

            [arrSet setObject:changeArr forKey:obj];

        }

        else

        {

            if ([value isKindOfClass:[NSNull class]]) {

                [set addObject:obj];

            }

        }

    }

    for (id obj in set)

    {

        mdic[obj] = @"";

    }

    for (id obj in dicSet.allKeys)

    {

        mdic[obj] = dicSet[obj];

    }

    for (id obj in arrSet.allKeys)

    {

        mdic[obj] = arrSet[obj];

    }

    

    return mdic;

}

- (NSArray *)deleteEmptyArr:(NSArray *)arr

{

    NSMutableArray *marr = [NSMutableArray arrayWithArray:arr];

    NSMutableArray *set = [[NSMutableArray alloc] init];

    NSMutableDictionary *dicSet = [[NSMutableDictionary alloc] init];

    NSMutableDictionary *arrSet = [[NSMutableDictionary alloc] init];

    

    for (id obj in marr)

    {

        if ([obj isKindOfClass:[NSDictionary class]])

        {

            NSDictionary *changeDic = [self deleteEmpty:obj];

            NSInteger index = [marr indexOfObject:obj];

            [dicSet setObject:changeDic forKey:@(index)];

        }

        else if ([obj isKindOfClass:[NSArray class]])

        {

            NSArray *changeArr = [self deleteEmptyArr:obj];

            NSInteger index = [marr indexOfObject:obj];

            [arrSet setObject:changeArr forKey:@(index)];

        }

        else

        {

            if ([obj isKindOfClass:[NSNull class]]) {

                NSInteger index = [marr indexOfObject:obj];

                [set addObject:@(index)];

            }

        }

    }

    for (id obj in set)

    {

        marr[(int)obj] = @"";

    }

    for (id obj in dicSet.allKeys)

    {

        int index = [obj intValue];

        marr[index] = dicSet[obj];

    }

    for (id obj in arrSet.allKeys)

    {

        int index = [obj intValue];

        marr[index] = arrSet[obj];

    }

    return marr;

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: