【iOS分享之路-快速开发电商平台】四、数据存储工具封装;

duwenquan-方形LOGO.png

引述

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

454BDD40-2B16-42F0-9169-CA8D09F6AE62.png

3.假如我们需要本地化的数据为用户信息,那么首先创建UserInfo,继承自DWQDBModel,如图所示,然后声明属性,UserInfo就相当于【表名】,声明的属性就相当于【字段】。对应需要存储的一些信息。


18AF03AB-36BB-4A67-A7E1-D6DFBEA2EBDB.png

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噢~~~~~~~!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容