
Snip20170803_162.png
本節(jié)主要講 數(shù)組和字典的 存取,通過data和string的轉(zhuǎn)換來達(dá)到目的。
SqliteTool:執(zhí)行多條sql語句的方法有些問題

Snip20170803_167.png
SqliteModelTool:
+ (BOOL)updateTable:(Class)cls uid:(NSString *)uid有幾處問題要修正:

Snip20170803_172.png
+ (BOOL)saveOrUpdateModel:(id)model uid:(NSString *)uid
1、要考慮到表更新失?。?/p>
if ([self isTableRequiredUpdate:cls uid:uid]) {
BOOL updateSuccess = [self updateTable:cls uid:uid];
if (!updateSuccess) {
NSLog(@"更新數(shù)據(jù)庫表結(jié)構(gòu)失敗");
return NO;
}
}
2、保存的時候,字典或數(shù)組轉(zhuǎn)換成NSData,再轉(zhuǎn)成字符串
if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) {
// 在這里, 把字典或者數(shù)組, 處理成為一個字符串, 保存到數(shù)據(jù)庫里面去
// 字典/數(shù)組 -> data
NSData *data = [NSJSONSerialization dataWithJSONObject:value options:NSJSONWritingPrettyPrinted error:nil];
// data -> nsstring
value = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
3、解析的時候,如果類型是數(shù)組或字典,則轉(zhuǎn)成NSData,再轉(zhuǎn)成字典或數(shù)組
3.1 從模型中獲取 字段和類型的 映射表:
NSDictionary *nameTypeDic = [XMGModelTool classIvarNameTypeDic:cls];
3.2 字符串-->data-->數(shù)組、字典
[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];
}];