美文网首页
Sqlite封装10 - 数组/字典处理 -

Sqlite封装10 - 数组/字典处理 -

作者: Lovell_ | 来源:发表于2017-08-03 23:13 被阅读172次
    Snip20170803_162.png

    本节主要讲 数组和字典的 存取,通过data和string的转换来达到目的。

    SqliteTool:执行多条sql语句的方法有些问题

    Snip20170803_167.png

    SqliteModelTool:

    + (BOOL)updateTable:(Class)cls uid:(NSString *)uid有几处问题要修正:

    Snip20170803_172.png

    + (BOOL)saveOrUpdateModel:(id)model uid:(NSString *)uid
    1、要考虑到表更新失败:

    if ([self isTableRequiredUpdate:cls uid:uid]) {
           BOOL updateSuccess = [self updateTable:cls uid:uid];
            if (!updateSuccess) {
                NSLog(@"更新数据库表结构失败");
                return NO;
            }
        }
    

    2、保存的时候,字典或数组转换成NSData,再转成字符串

    if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) {
        // 在这里, 把字典或者数组, 处理成为一个字符串, 保存到数据库里面去
                
        // 字典/数组 -> data
        NSData *data = [NSJSONSerialization dataWithJSONObject:value options:NSJSONWritingPrettyPrinted error:nil];
                
        // data -> nsstring
        value = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
    

    3、解析的时候,如果类型是数组或字典,则转成NSData,再转成字典或数组

    3.1 从模型中获取 字段和类型的 映射表:

    NSDictionary *nameTypeDic = [XMGModelTool classIvarNameTypeDic:cls];
    

    3.2 字符串-->data-->数组、字典

    [modelDic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        
        NSString *type = nameTypeDic[key];
    
        id resultValue = obj;
        if ([type isEqualToString:@"NSArray"] || [type isEqualToString:@"NSDictionary"]) {
            
            // 字符串 ->
            NSData *data = [obj dataUsingEncoding:NSUTF8StringEncoding];
            resultValue = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
            
        }else if ([type isEqualToString:@"NSMutableArray"] || [type isEqualToString:@"NSMutableDictionary"]) {
            NSData *data = [obj dataUsingEncoding:NSUTF8StringEncoding];
            resultValue = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        }
        
        [model setValue:resultValue forKeyPath:key];
        
    }];
    

    相关文章

      网友评论

          本文标题:Sqlite封装10 - 数组/字典处理 -

          本文链接:https://www.haomeiwen.com/subject/sgjmlxtx.html