【iOS分享之路-快速開發(fā)電商平臺】四、數(shù)據(jù)存儲工具封裝;

duwenquan-方形LOGO.png

引述

APP登錄后,首先返回的莫過于用戶的信息,通常情況下,我們會將這部分?jǐn)?shù)據(jù)保存到本地,能夠在我們想用到用戶信息的地方很容易的就獲取到,而不用再通過接口獲取,這樣能夠使程序運(yùn)行的更流暢。iOS開發(fā)中提供了幾種數(shù)據(jù)本地化的方式,每一種都有各自的優(yōu)缺點(diǎn),每個開發(fā)者也會根據(jù)自己的喜好,數(shù)據(jù)量的大小使用不同的數(shù)據(jù)本地化的方式。下面我羅列一些iOS開發(fā)經(jīng)常用的數(shù)據(jù)本地化方式,然后再為各位讀友奉上我基于FMDB封裝的數(shù)據(jù)本地化工具。
???常用數(shù)據(jù):本地化存儲方式:

  • NSKeyedArchiver:

采用歸檔的形式來保存數(shù)據(jù),該數(shù)據(jù)對象需要遵守NSCoding協(xié)議,并且該對象對應(yīng)的類必須提供encodeWithCoder:和initWithCoder:方法。前一個方法告訴系統(tǒng)怎么對對象進(jìn)行編碼,而后一個方法則是告訴系統(tǒng)怎么對對象進(jìn)行解碼。

  • NSUserDefaults:

用來保存應(yīng)用程序設(shè)置和屬性、用戶保存的數(shù)據(jù)。用戶再次打開程序或開機(jī)后這些數(shù)據(jù)仍然存在。NSUserDefaults可以存儲的數(shù)據(jù)類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存儲其他類型,則需要轉(zhuǎn)換為前面的類型,才能用NSUserDefaults存儲。

  • Write寫入方式:永久保存在磁盤中。

具體方法為:
第一步:獲得文件即將保存的路徑
第二步:生成在該路徑下的文件
第三步:往文件中寫入數(shù)據(jù)
最后:從文件中讀出數(shù)據(jù)

  • SQLite:采用SQLite數(shù)據(jù)庫來存儲數(shù)據(jù)。

SQLite作為一中小型數(shù)據(jù)庫,應(yīng)用ios中,跟前三種保存方式相比,相對比較復(fù)雜一些。所以本文的重點(diǎn)【FMDB】也應(yīng)運(yùn)而生,F(xiàn)MDB是一種第三方的開源庫,F(xiàn)MDB就是對SQLite的API進(jìn)行了封裝,加上了面向?qū)ο蟮乃枷耄屛覀儾槐厥褂梅爆嵉腃語言API函數(shù),比起直接操作SQLite更加方便。然而,使用FMDB依然需要些SQL語句,所以我基于FMDB做了封裝,簡化了數(shù)據(jù)庫的操作。

DWQDBManger:

由于本人之前做過一段時間的DBA,編寫過大量的存儲過程和SQL腳本,多表查詢,左連接,有連接,自然連接,笛卡爾積,游標(biāo),索引等等,所以能夠熟練編寫各類SQL語句。所以在本地化數(shù)據(jù)存儲中,我通常會用SQLite來做數(shù)據(jù)本地化。然而很多iOS開發(fā)者對SQL語句并不是很熟悉,所以會放棄使用這種方式。FMDB的出現(xiàn),又讓一部分開發(fā)者選擇使用SQLite。最后,我對FMDB進(jìn)行了封裝,極大簡化開發(fā)者對數(shù)據(jù)庫的操作,與多數(shù)FMDB封裝不同,本封裝是直接實(shí)體類對象來做增、刪、改、查。代碼中有比較詳細(xì)的注釋和講解,本封裝利用了runtime的機(jī)制,可以幫助初學(xué)者理解objective-c的黑魔法:runtime。

使用方法:

1.首先將DWQDBManger文件夾拖入工程中【注意:文件夾已經(jīng)包含了FMDB】。
2.加入依賴庫libsqlite3.tbd

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

3.假如我們需要本地化的數(shù)據(jù)為用戶信息,那么首先創(chuàng)建UserInfo,繼承自DWQDBModel,如圖所示,然后聲明屬性,UserInfo就相當(dāng)于【表名】,聲明的屬性就相當(dāng)于【字段】。對應(yīng)需要存儲的一些信息。


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

4.然后在PCH文件中,引入頭文件“UserInfo.h”
5.以登錄成功后返回用戶信息需要本地化為例子,實(shí)例化一個UserInfo對象

UserInfo *userInfo=[[UseInfo alloc] init];

然后給對象聲明的屬性進(jìn)行賦值,最后調(diào)用save方法保存數(shù)據(jù);示例代碼為:

    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"];
    //插入到數(shù)據(jù)庫中需要調(diào)用的方法
    [self.accountInfo save];

6.查詢-或者叫從數(shù)據(jù)庫中取數(shù)據(jù)。

a.每次登錄成功就會向表中插入一行數(shù)據(jù),我們想獲取最新的數(shù)據(jù),只能取最后一行數(shù)據(jù),方法可以通過調(diào)用findAll返回的數(shù)組判斷個數(shù),然后再通過主鍵查詢 + (instancetype)findByPK:(int)inPk;
b.其次還可以用每次插入表中數(shù)據(jù)之前清空一次表就可以了。然后調(diào)用 【userInfo findByPK:1】就可以獲取到用戶信息了。示例代碼如下

1.首先在每一次插入數(shù)據(jù)之前調(diào)用類方法清空數(shù)據(jù)的方法
[UserInfo clearTable]
2.然后再插入數(shù)據(jù),上方第5步
3.最后在需要獲取數(shù)據(jù)的地方使用即可
  UserInfo *user=[UserInfo findByPK:1];
  NSString *mid= user.member_id

更多使用方法請?jiān)敿?xì)查看DWQDBModel.h文件,不再一一列舉。

GitHub 上Demo下載地址

GitHubDemo
記的在GItHub上個Star噢~~~~~~~!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容