简单天气应用开发--添加多个页面以及本地缓存

  断断续续重写了原来项目的代码,新的应用可以添加多个城市,同时用SQLite实现本地缓存的功能。

 

  在重写的项目中,我没有使用Storyboard,而是使用代码来构建主页面。

  要实现添加多个页面,同时每个页面还要可以下拉刷新的功能,我目前想到的就是用一个scrollview在后面充当垫板,每个城市页面再附在上面。用拖控件的方式的话,多个scrollview叠在一起,后面的控件就无法交互了。也许是我对控件理解不够,总是无法解决,所以最后决定用代码写主界面,xib构建单独的城市页面。

  在实现添加页面功能的过程中,印象最深的就是viewWithTag,添加一个tag就可以随意的取出之前的页面。

  在原来的项目中也有本地缓存的功能,不过那个项目只有一个页面,所以直接使用写文件的方式存储JSON数据。在现在的项目中,有了多个页面需要缓存,单纯的写文件明显不够用,查了网上的资料后决定使用SQLite来存储数据。

  使用SQLite的过程中,最主要的问题就是如何把二进制文件存入数据库。现在有两种方法,一是存文件的路径,二是直接写入。存文件路径不会影响数据库效率,但是我觉得有点繁琐,每次查询天气得到的数据还得命名写入沙盒。直接写入会影响效率,但是天气的JSON数据很小,我觉得影响不大。

  存入JSON需要在表中建立blob字段,JSON转换为NSData,insert语句中对应位置用‘?’代理,然后使用bind语句绑定,例如:

1 NSData *data = [NSJSONSerialization dataWithJSONObject:weatherdic options:NSJSONWritingPrettyPrinted error:nil];
2 NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_weather VALUES (%ld,?);",cityid];
3 sqlite3_stmt *savestmt;
//准备语句
4 sqlite3_prepare_v2(_db, sql.UTF8String, -1, &savestmt, NULL);
//绑定数据
5 sqlite3_bind_blob(savestmt, 1, [data bytes], (int)[data length], NULL);
//执行语句
6 sqlite3_step(savestmt);

  每次打开应用时,会首先从数据库读取天气数据构建页面。现在准备加上检测网络状态,自动刷新和定位的功能。

  GitHub地址:https://github.com/SilentWalker/SimpleWeather

posted @ 2016-02-23 16:50  SilentWalker  阅读(543)  评论(0编辑  收藏  举报