引述
APP登录后,首先返回的莫过于用户的信息,通常情况下,我们会将这部分数据保存到本地,能够在我们想用到用户信息的地方很容易的就获取到,而不用再通过接口获取,这样能够使程序运行的更流畅。iOS开发中提供了几种数据本地化的方式,每一种都有各自的优缺点,每个开发者也会根据自己的喜好,数据量的大小使用不同的数据本地化的方式。下面我罗列一些iOS开发经常用的数据本地化方式,然后再为各位读友奉上我基于FMDB封装的数据本地化工具。
常用数据:本地化存储方式:
- NSKeyedArchiver:
采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码。
- NSUserDefaults:
用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储。
- Write写入方式:永久保存在磁盘中。
具体方法为:
第一步:获得文件即将保存的路径
第二步:生成在该路径下的文件
第三步:往文件中写入数据
最后:从文件中读出数据
- SQLite:采用SQLite数据库来存储数据。
SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。所以本文的重点【FMDB】也应运而生,FMDB是一种第三方的开源库,FMDB就是对SQLite的API进行了封装,加上了面向对象的思想,让我们不必使用繁琐的C语言API函数,比起直接操作SQLite更加方便。然而,使用FMDB依然需要些SQL语句,所以我基于FMDB做了封装,简化了数据库的操作。
DWQDBManger:
由于本人之前做过一段时间的DBA,编写过大量的存储过程和SQL脚本,多表查询,左连接,有连接,自然连接,笛卡尔积,游标,索引等等,所以能够熟练编写各类SQL语句。所以在本地化数据存储中,我通常会用SQLite来做数据本地化。然而很多iOS开发者对SQL语句并不是很熟悉,所以会放弃使用这种方式。FMDB的出现,又让一部分开发者选择使用SQLite。最后,我对FMDB进行了封装,极大简化开发者对数据库的操作,与多数FMDB封装不同,本封装是直接实体类对象来做增、删、改、查。代码中有比较详细的注释和讲解,本封装利用了runtime的机制,可以帮助初学者理解objective-c的黑魔法:runtime。
使用方法:
1.首先将DWQDBManger文件夹拖入工程中【注意:文件夹已经包含了FMDB】。
2.加入依赖库libsqlite3.tbd
3.假如我们需要本地化的数据为用户信息,那么首先创建UserInfo,继承自DWQDBModel,如图所示,然后声明属性,UserInfo就相当于【表名】,声明的属性就相当于【字段】。对应需要存储的一些信息。
4.然后在PCH文件中,引入头文件“UserInfo.h”
5.以登录成功后返回用户信息需要本地化为例子,实例化一个UserInfo对象
UserInfo *userInfo=[[UseInfo alloc] init];
然后给对象声明的属性进行赋值,最后调用save方法保存数据;示例代码为:
NSDictionary * dict=responseObject[@"data"];
userInfo.create_time=dict[@"create_time"];
userInfo.id_card=dict[@"id_card"];
userInfo.is_partner=dict[@"is_partner"];
userInfo.member_avatar=dict[@"member_avatar"];
userInfo.member_id=dict[@"member_id"];
userInfo.member_name=dict[@"member_name"];
userInfo.member_status=dict[@"member_status"];
userInfo.partner_status=dict[@"partner_status"];
userInfo.password_is_null=dict[@"password_is_null"];
userInfo.spare_money=dict[@"spare_money"];
userInfo.sex=dict[@"sex"];
//插入到数据库中需要调用的方法
[self.accountInfo save];
6.查询-或者叫从数据库中取数据。
a.每次登录成功就会向表中插入一行数据,我们想获取最新的数据,只能取最后一行数据,方法可以通过调用findAll返回的数组判断个数,然后再通过主键查询 + (instancetype)findByPK:(int)inPk;
b.其次还可以用每次插入表中数据之前清空一次表就可以了。然后调用 【userInfo findByPK:1】就可以获取到用户信息了。示例代码如下
1.首先在每一次插入数据之前调用类方法清空数据的方法
[UserInfo clearTable]
2.然后再插入数据,上方第5步
3.最后在需要获取数据的地方使用即可
UserInfo *user=[UserInfo findByPK:1];
NSString *mid= user.member_id
更多使用方法请详细查看DWQDBModel.h文件,不再一一列举。
GitHub 上Demo下载地址
GitHubDemo
记的在GItHub上个Star噢~~~~~~~!