美文网首页
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