writeToFile 写入失败问题 ---字典去空值

 

1. 写入的必须是NSString,NSDate,NSArray,NSDictionary等基本数据类型或遵守NSCoding协议的对象

2.写入的数据不能为自定义类型或者Null (服务器返回的字典里,有个键对应的值为Null,搞了半天写不进去)

- (void)saveUserInfoWithDictionary:(NSDictionary *)dict{

    // 去除空值
    NSMutableDictionary *dic = dict.mutableCopy;
    for (NSString * key in dic.allKeys) {
        id value = [dic valueForKey:key];
        if (value == nil || [value isKindOfClass:[NSNull class]]) {
            value = @"";
            [dic setValue:value forKey:key];
        }
    }
    
    // 保存本地
    if ([dic writeToFile:kUserInfoPath atomically:YES]) {
        NSLog(@"保存用户信息成功");
    }
}

如果字典是多层的, 既字典里面包含字典,或者字典里包含数组,数组里又是字典,可以写个递归

@implementation NSDictionary (Extension)

- (NSString*)stringForKey:(NSString*)key
{
    id retObj = @"";
    
    if ([self isKindOfClass:[NSDictionary class]]) {
        NSDictionary *dict = (NSDictionary*)self;
        retObj = [dict valueForKey:key];
        
        if ([retObj isKindOfClass:[NSNumber class]]) {
            retObj = [retObj stringValue];
        }
        
        if (![retObj isKindOfClass:[NSString class]]) {
            retObj = [NSString string];
        }
    }
    return retObj;
}


// 会遍历每一个键值对, 建议让后台的小伙伴尽量别返回null
- (NSDictionary *)removeNull{
    
    // 去除空值
    NSMutableDictionary *dic = self.mutableCopy;
    for (NSString * key in dic.allKeys) {
        id value = [dic valueForKey:key];
        
        // 字典里包含字典
        if ([value isKindOfClass:[NSDictionary class]]) {
            value = [value removeNull];
            [dic setValue:value forKey:key];
        }
        
        // 如果是数组
        else if ([value isKindOfClass:[NSArray class]]) {
            NSMutableArray *array = [value mutableCopy];
            for (int i= 0; i<array.count; i++) {
                
                // 数组里包含字典
                if ([array[i] isKindOfClass:[NSDictionary class]]) {
                    NSDictionary *dic = array[i];
                    dic = [dic removeNull];
                    [array replaceObjectAtIndex:i withObject:dic];
                }
                // 如果是空
                else if (array[i] == nil || [array[i] isKindOfClass:[NSNull class]]) {
                    [array replaceObjectAtIndex:i withObject:@""];
                }
                
            }
            [dic setValue:array forKey:key];
        }
        
        //
        else if (value == nil || [value isKindOfClass:[NSNull class]]) {
            value = @"";
            [dic setValue:value forKey:key];
        }
    }

    return dic;
}
@end

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值