知乎日报第三周总结
Posted Carry666666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知乎日报第三周总结相关的知识,希望对你有一定的参考价值。
已完成:
- 完善了web网页界面的视图内容
- 改进了点击cell后web网页的加载逻辑(由点击后一次全部加载改为点击后先只加载当前点击的一个,后面滑动到新页的时候再加载新的web网页)
- 学习了FMDB第三方库的使用,并实现了收藏功能
收藏功能的实现思路是:当点击收藏按钮的时候,创建FMDB数据库,并将需要用到的值插入数据库,并改变收藏按钮的imageView,后续再点击时则分情况处理,若已收藏则取消收藏,改回收藏按钮的imageView,并删除数据库中当前页面的相应数据,当滑动scrollView到新页面时,遍历数据库,判断当前页面是否收藏从而加载其收藏按钮的imageView,最后当点击我的收藏cell查看已收藏内容时,先将需要用到的数据从库中取出并存到一个数组中便于后续使用,然后利用存好数据的数组加载tableView,并编写cell的点击事件,最后在加载收藏cell的Controller中利用ViewController的生命周期刷新收藏的tableView即可实现整个收藏功能。
学到的内容:
- FMDB第三方库的基本使用和简单机制
- 利用viewController的生命周期刷新视图
遇到的问题:
由于FMDB数据库插入数据时会自动将数据转换为字符串插入,所以若要插入数组,则要先将数组转换为json类型的字符串,再将该字符串插入数据库,最后取出数据时先取出json字符串,然后将该字符串转换为数组即可,但是数据想要转换为json类型的字符串需要满足以下要求,否则无法成功转换:
顶层对象必须是NSArray或者NSDictionary
所有的对象必须是NSString/NSNumber/NSArray/NSDictionary/NSNull的实例
所有NSDictionary的key必须是NSString类型
数字对象不能是非数值或无穷;
另外,想要一次向数据库中插入多种数据时,需要注意:
在第一次建库的时候就要声明多种类型,否则第一次建库成功之后再去修改创表时该库中的数据类型时由于库已存在,代码不会重复执行建库,所以就没有效果:
代码如下:
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName = [doc stringByAppendingPathComponent:@"agreeTestSecond.sqlite"];
//FMDatabase表示一个SQLite数据库,用来执行SQL语句
FMDatabase *dataBase = [FMDatabase databaseWithPath:fileName];
if ([dataBase open]) {
//创建表
//在此处第一次建表时就要声明例如下方括号中的多种id类型,就可以后续存入多种类型的值
BOOL result = [dataBase executeUpdate:@"CREATE TABLE IF NOT EXISTS t_agreeOrder (id TEXT, idSecond TEXT, idThird TEXT, idFourth TEXT);"];
if (result) {
NSLog(@"创表成功");
} else {
NSLog(@"创表失败!");
}
}
}
另外,FMDB数据库插入值时不管是什么种类的值,都是按顺序一个一个插入,取值时也是按顺序一个一个取出,所以在需要取出值的时候就需要注意这一点。
补充:
将json字符串转换为数组时可以使用JSONKit第三方库,也可使用Apple自带的NSJSONSerialization,但是NSJSONSerialization的效率远高于JSONKit
以上是关于知乎日报第三周总结的主要内容,如果未能解决你的问题,请参考以下文章